我有一个MongoDB查询,它返回一组单级BSON对象。
db.companies.aggregate([
{ $unwind: {
path: "$addresses", includeArrayIndex: "arrayIndex"}
},
{ $project: {
hrId:1,
arrayIndex:1,
location:'$addresses.location',
street:'$addresses.street',
city:'$addresses.city',
state:'$addresses.state',
country:'$addresses.country',
postCode:'$addresses.postCode'}
}])
我想将其导出到csv文件。我一直在网上寻找一个简单的解决方案,但无济于事。如果需要,我很乐意使用gui / tool来执行此操作。
提前感谢您的帮助
答案 0 :(得分:3)
逻辑上我们可以将问题分成两部分。
1)在给定集合上运行聚合
2)将返回的结果导出到外部文件中。
MongoDB并不直接支持导出查询结果,但我们可以发挥作用,让MongoDB做我们想做的事。
<强>解决方案:强>
1)将聚合结果导出到另一个集合。
2)将该集合的mongoexport
导出结果导入csv文件。
根据您的示例,我将$out
添加到管道末尾。
db.companies.aggregate([
{ $unwind: {
path: "$addresses", includeArrayIndex: "arrayIndex"}
},
{ $project: {
hrId:1,
arrayIndex:1,
location:'$addresses.location',
street:'$addresses.street',
city:'$addresses.city',
state:'$addresses.state',
country:'$addresses.country',
postCode:'$addresses.postCode'}
},
{ $out: "tempCompaniesCollection"}])
此查询会将查询结果存储到tempCompaniesCollection
集合中。现在我们可以将mongoexport
作为
mongoexport -d "database" -c "tempCompaniesCollection" -f "hrId,arrayIndex,location,street,city,state,country,postCode" --type csv -o csvfile.csv
这会将结果导出到名为csvfile.csv
的文件。
注意:如果导出类型为csv,
mongoexport
确实需要提供字段名称。请参阅mongoexport文档。
答案 1 :(得分:0)
MongoChef工具(免费版)允许您将文档导出为CSV。 http://3t.io/mongochef/