如何将 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
将帮助仅打印实际文档的最后一行,否则整个执行统计信息将写入文件。
好的,这里对我有用的是 mongodb
的 aggregate
方法的 $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
.
我是 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
将帮助仅打印实际文档的最后一行,否则整个执行统计信息将写入文件。
好的,这里对我有用的是 mongodb
的 aggregate
方法的 $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
.