如何将 mongodb 不同或聚合结果存储到文件

how to store mongodb distinct or aggregation result to a file

我是 mongodb 观点的新手。我有一个明显的手机号码结果,我想将它们存储在 csv 文件中。

下面是我的查询,运行良好:

db.myCollection.distinct('jsonObject.keyIdentifier',{'$and' : [{'jsonObject.responseRaw' : {$not: /<Amount>/}},{'jsonObject.createDate':{$gt: '2020-05-12'} }]})

输出:在shell/console

["9898989896",
"9898989897",
"9898989898",
...,
...
]

我读了一些我不能将结果导出到平面文件的地方。我需要先创建一个视图。然后我需要将该视图导出到一个文件。但是我无法生成视图..我尝试了以下

db.createView("jsonObject.keyIdentifier","myCollection", [{ $group: { _id: "'$and' : [{'jsonObject.responseRaw' : {$not: /<Amount>/}},{'jsonObject.createDate':{$gt: '2020-05-12'} }]"}}]);

然后我写导出查询:

mongoexport -d MongoDB -c jsonObject.keyIdentifier --type=csv -f "_id" -o D:\uploads\DAta\csvFile\report111.csv

但是我在 csv 文件中得到了下面的文本

_id
"'$and' : [{'jsonObject.responseRaw' : {$not: /<Amount>/}},{'jsonObject.createDate':{$gt: '2020-05-01'} }]"

如何解决这个难题...如何将输出存储到文件中。

因为您只想将查询结果写入文件,因为默认 mongoexport 不支持任何聚合查询而不是创建视图和执行操作,您可以尝试如下所示:

mongo --host='mongodb+srv://uname:password@cluster10-abcde.mongodb.net/dbName?retryWrites=true&w=majority' --eval 'printjson(db.collectionName.aggregate([{"$group" : {"_id" : "", authors: {"$addToSet" : "$author"}}}, {"$project" : {"_id" :0}}]).toArray());' | tail -n 1 > pathToFile.json

就像你的情况一样,因为你在执行结束时做 .distinct 或类似的 $group on no condition i.e; {$group : {_id : ''}} 你将始终只有一个文档或数组,使用 tail -n 1 将帮助仅打印实际文档的最后一行,否则整个执行统计信息将写入文件。

好的,这里对我有用的是 mongodbaggregate 方法的 $out 阶段。我所做的是通过 $out 将聚合结果存储到新的 collection(它将自动生成),然后使用 mongoexport 语句将其导出到 csv。以下是步骤:

1.

db.myCollection.aggregate([{'$match':{'$and' : [{'jsonObject.responseRaw' : {'$not': /<Amount>/}},{'jsonObject.createDate':{'$gt': '2020-05-01'}}]}},{'$group':{'_id': '$jsonObject.keyIdentifier'}},{$out: "collectionB"}])

2.

mongoexport -d MyMongoDb -c collectionB  -f _id --csv > D:\uploads\DAta\csvFile\results1111.csv

注意:这里-f是指示字段;创建 csv 时必需。我只需要 _id.