将 MongoDB 查询导出到文件

wbm*_*wbm 2 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'} 
    }])
Run Code Online (Sandbox Code Playgroud)

我想将其导出到 csv 文件。我一直在网上寻找一个简单的解决方案,但无济于事。如果需要,我很乐意使用 gui/工具来执行此操作。

在此先感谢您的帮助

Sal*_*eem 5

从逻辑上讲,我们可以将问题分为两部分。

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"}])
Run Code Online (Sandbox Code Playgroud)

此查询将我们的查询结果存储到tempCompaniesCollection集合中。现在我们可以运行mongoexport

mongoexport -d "database" -c "tempCompaniesCollection" -f "hrId,arrayIndex,location,street,city,state,country,postCode" --type csv -o csvfile.csv
Run Code Online (Sandbox Code Playgroud)

这会将结果导出到名为csvfile.csv.

注意:mongoexport如果导出类型是 csv,则需要提供文件名。请参阅mongoexport文档。