mongoexport是否支持在查询参数中跨集合执行查询?
关于MongoDB 4.2.8 mongoexport跨集合查询功能的解答
MongoDB 4.2.8 版本的 mongoexport 不支持在查询时直接关联操作其他集合,你当前使用的 --query 参数写法是无效的:--query 仅支持传入针对当前指定导出集合(也就是你这里的employee集合)的过滤条件,不能直接执行其他集合的查询语句。
可行的解决方案
方案1:先查部门集合拿员工ID列表,再导出员工数据
- 先在Mongo Shell中查询department集合,拿到所有departmentId为10对应的employeeID列表:
db.department.find({"departmentId":10},{"employeeID":1, "_id":0})
- 假设得到的员工ID列表为
[2,5,7,9],替换到下面的mongoexport命令中即可导出对应数据:
mongoexport --host="xxx:1111" --db=dbname --pretty --collection=employee --query='{"employeeID": {$in: [2,5,7,9]}}' --out=output.json
方案2:关联查询结果写入临时集合后导出
如果符合条件的员工ID数量过多,或者需要自动化执行,可以先通过聚合查询关联两个集合,将结果写入临时集合后再导出:
- 在Mongo Shell中执行聚合操作,生成临时集合:
db.employee.aggregate([ { $lookup: { from: "department", localField: "employeeID", foreignField: "employeeID", as: "deptInfo" } }, { $match: { "deptInfo.departmentId": 10 } }, { $project: { "deptInfo": 0 } }, { $out: "temp_employee_dept10" } ])
- 导出临时集合数据:
mongoexport --host="xxx:1111" --db=dbname --pretty --collection=temp_employee_dept10 --out=output.json
- 导出完成后可自行删除临时集合释放存储空间。
额外注意事项
你之前写的命令里使用了中文全角引号 “” ‘’,会导致命令解析报错,所有引号都要替换为英文半角的 "" ''。
内容的提问来源于stack exchange,提问作者Imran khan
相关产品推荐
相关产品推荐

