将MongoDB查询导出到文件

时间:2016-09-20 01:28:22

标签: mongodb

我有一个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来执行此操作。

提前感谢您的帮助

2 个答案:

答案 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/