您可以通过使用 MongoDb 的聚合管道操作来构建一个临时集合,其中包含您要导出的形状的数据,从而完成您正在尝试做的事情:
use mydb
db.mycollection.aggregate([
{$unwind: "$types"},
{$project: { _id: 0, name: 1, type: "$types.type" } },
{$out: "tmp4csv"}
]);
这将创建一个 tmp4csv 集合,其中包含数组每个元素的文档
即在您的示例中(并添加一个 _id 值,因为在我建议的解决方案中必须考虑该值)
{
_id: ObjectId("54e3ce75cb87e6d036287cc6"),
name:"test",
types:[
{type:"A"},
{type:"B"},
{type:"C"}
]
}
通过使用 $unwind 运算符变为
{ _id: ObjectId("54e3ce75cb87e6d036287cc6"), name:"test", types:[ {type:"A"} ] },
{ _id: ObjectId("54e3ce75cb87e6d036287cc6"), name:"test", types:[ {type:"B"} ] },
{ _id: ObjectId("54e3ce75cb87e6d036287cc6"), name:"test", types:[ {type:"C"} ] }
接下来,$project 运算符用于稍微改造数据 - 将 types.type 解包为 type 并为每个文档提供一个新的唯一 _id 值。
最后,聚合管道生成的文档使用 $out 运算符输出到“tmp4csv”集合中。如果没有在上一步中创建唯一的 _id 值,此步骤将由于重复键而失败。
然后,您可以将数据导出到输出文件:
mongoexport -h localhost -d mydb -c tmp4csv -f name,type --csv --out output.csv
为了保持一切干净,我将删除作为其中一部分创建的 tmp4csv 集合:
use mydb
db.tmp4csv.drop()
这应该会给你一个带有你喜欢的输出格式的 csv 文件。
参考:聚合管道文档:http :
//docs.mongodb.org/manual/aggregation/ 展开运算符,因为这是关键:http ://docs.mongodb.org/manual/reference/operator/aggregation/unwind/