Bạn có thể thực hiện những gì bạn đang cố gắng làm bằng hoạt động đường ống kết hợp MongoDB để xây dựng ra một bộ sưu tập tạm thời với các dữ liệu trong hình dạng bạn muốn xuất khẩu:
use mydb
db.mycollection.aggregate([
{$unwind: "$types"},
{$project: { _id: 0, name: 1, type: "$types.type" } },
{$out: "tmp4csv"}
]);
này sẽ tạo ra một bộ sưu tập tmp4csv trong đó có một tài liệu cho mỗi phần tử của mảng
i.e trong ví dụ của bạn (và thêm một giá trị _id như giá trị này phải được đưa vào xem xét trong dung đề nghị của tôi)
{
_id: ObjectId("54e3ce75cb87e6d036287cc6"),
name:"test",
types:[
{type:"A"},
{type:"B"},
{type:"C"}
]
}
thông qua việc sử dụng các toán tử $ Thư giãn trở thành
{ _id: ObjectId("54e3ce75cb87e6d036287cc6"), name:"test", types:[ {type:"A"} ] },
{ _id: ObjectId("54e3ce75cb87e6d036287cc6"), name:"test", types:[ {type:"B"} ] },
{ _id: ObjectId("54e3ce75cb87e6d036287cc6"), name:"test", types:[ {type:"C"} ] }
Tiếp theo $ nhà điều hành dự án được sử dụng để cải cách dữ liệu một chút - giải nén types.type thành loại và cung cấp một giá trị _id duy nhất mới cho mỗi tài liệu.
Cuối cùng, các tài liệu được tạo bởi đường ống tổng hợp được đưa vào bộ sưu tập "tmp4csv" bằng toán tử $ out. Nếu không có việc tạo ra một giá trị _id duy nhất trong bước trước, bước này sẽ thất bại do các khóa trùng lặp.
Sau đó bạn có thể xuất dữ liệu vào một tập tin đầu ra:
mongoexport -h localhost -d mydb -c tmp4csv -f name,type --csv --out output.csv
Và để giữ cho mọi thứ sạch Sau đó tôi sẽ thả bộ sưu tập tmp4csv đã được tạo ra như một phần của việc này:
use mydb
db.tmp4csv.drop()
này nên cung cấp cho bạn tệp csv với định dạng đầu ra ưa thích của bạn.
Tài liệu tham khảo: Aggregation đường ống doc: http://docs.mongodb.org/manual/aggregation/ Thư giãn điều hành vì đây là chìa khóa: http://docs.mongodb.org/manual/reference/operator/aggregation/unwind/
Tôi có kịch bản chính xác như vậy. Tôi không muốn viết một kịch bản tùy chỉnh để xử lý điều này, bởi vì tôi muốn có trách nhiệm chính về các nhà phân tích dữ liệu của chúng tôi (những người có thể chạy mongoexport) thay vì nhóm phát triển của tôi. Bạn có thể tìm cách giải quyết vấn đề này không? – feathj