MongoDB v4.4.20聚合查询用于mongodump报错的解决求助
问题原因及解决方法
错误原因
mongodump的--queryFile参数仅支持单文档格式的查询过滤条件(和find()方法的查询参数格式一致),无法直接传入聚合管道数组。你把聚合管道数组放进查询文件后,工具因无法将数组解析为合法的查询文档,从而抛出解析错误。
解决方案
方案一:使用mongoexport直接导出(推荐)
mongoexport支持通过--aggregate参数指定聚合管道,适配你这种需要先做数据转换再导出的场景,且能直接生成CSV/JSON格式文件。
- 保留原聚合管道内容,保存到
q.json文件:
[ {$unwind: "$la"}, {$unwind: "$la.pd"}, {$project: { _id: 0 ,value_extract : "$la.va.myobj.myval"} } ]
- 导出为JSON文件:
mongoexport --db mydb --collection mycollection --aggregate q.json --out /home/op.json
- 导出为CSV文件(需指定要导出的字段):
mongoexport --db mydb --collection mycollection --aggregate q.json --type=csv --fields value_extract --out /home/op.csv
方案二:先将聚合结果写入临时集合,再用mongodump导出
若必须使用mongodump,可先把聚合结果存入临时集合,再导出该集合:
- 在MongoDB Shell中执行聚合,将结果写入临时集合:
db.mycollection.aggregate([ {$unwind: "$la"}, {$unwind: "$la.pd"}, {$project: { _id: 0 ,value_extract : "$la.va.myobj.myval"} }, {$out: "temp_export_collection"} ])
- 用
mongodump导出临时集合:
mongodump --db mydb --collection temp_export_collection --out /home/temp_dump
- 导出完成后,可删除临时集合:
db.temp_export_collection.drop()
注:mongodump默认导出BSON格式文件,若需要CSV/JSON,需先用mongorestore恢复数据,再用mongoexport转换格式,步骤较繁琐,优先推荐方案一。
内容的提问来源于stack exchange,提问作者Hello
相关产品推荐
相关产品推荐

