MongoDB 3.4如何通过查询导出最近一周数据 queryFile不生效求助
MongoDB 3.4 mongodump --queryFile 不生效问题排查及解决方案
核心问题原因
- MongoDB 3.4 版本的
--queryFile参数仅支持传入纯查询条件JSON对象,不支持执行完整的Mongo Shell JS脚本,你当前的Script.js包含变量定义、DB操作、find调用等逻辑,不符合参数要求。 - 脚本中存在大小写不一致问题:mongodump参数中指定的库名为
DBname、集合名为Coll,但脚本里写的是DBName、Collection,大小写不匹配也会导致查询失效。 - 不需要在queryFile中重复指定库、集合以及
find()方法,queryFile仅需传入find()方法的第一个参数(查询条件对象)即可。
解决方案
方案1:直接使用--query参数拼接动态日期(推荐)
不需要单独写查询文件,直接在命令行中生成7天前的日期传入查询条件即可:
Linux/macOS 环境命令:
mongodump --host localhost --port 27017 -d DBname -c Coll --query "{\"_updatedAt\":{\"\$lt\": new Date($(date -d "-7 days" +%s)000)}}"
Windows PowerShell 环境命令:
$date = (Get-Date).AddDays(-7).ToUniversalTime() $timestamp = [Math]::Floor(($date - (Get-Date "1970-01-01")).TotalMilliseconds) mongodump --host localhost --port 27017 -d DBname -c Coll --query "{\`"_updatedAt\`":{\`"\$lt\`": new Date($timestamp)}}"
方案2:先生成符合要求的查询文件再调用mongodump
如果需要通过JS文件管理查询条件,可以分两步执行:
- 编写查询生成脚本
gen_query.js,内容仅用于输出符合要求的查询JSON:
var date = new Date(); date.setDate(date.getDate() - 7); printjson({"_updatedAt": { $lt: date }});
- 调用Mongo Shell执行该脚本,输出纯查询条件到
query.json:
mongo --quiet gen_query.js > query.json
- 使用生成的
query.json执行mongodump:
mongodump --host localhost --port 27017 -d DBname -c Coll --queryFile query.json
注意事项
- 确认数据库名、集合名的大小写和实际业务环境完全一致,MongoDB在Linux等大小写敏感的系统中,库名、集合名大小写敏感。
- 所有写入
--queryFile的内容不能包含变量定义、函数调用、DB操作等执行逻辑,只能是纯的查询条件对象。
内容的提问来源于stack exchange,提问作者Yogesh J
相关产品推荐
相关产品推荐

