我试图转储自每天午夜以来在 MongoDB 中创建的所有条目。我创建了一个使用 'mongoexport' 实用程序的 unix 脚本。它返回零记录。以下是命令。
# Generate a variable that stores today's date and 00:00 hours in epoch format
toDay=$(date +%Y-%m-%d)
todayMidnightEpoch=$(date -d "${toDay} 00:00:00" "+%s")
# Now plug this epoch variable into mongoexport command
mongoexport \
--host <hostname> \
--username <user ID> \
--password <password> \
--db <db name> \
--limit 100000 \
--collection <collection name> \
--out filename-$(date +%Y%m%d).json \
--query '{created_at:{"$gte": "new Date(${todayMidnightEpoch})"}}'
- 我在 CentOS+MongoDB 服务器上运行这个脚本。
- 我在没有查询选项的情况下测试了 mongoexport 命令,几乎立即获得了所有文档的输出。
跑步超过 10-20 分钟后,我得到零记录。当我在 Mongo Shell 上运行相同的“查询”并将变量替换为实际纪元值时,我会立即得到正确的输出。
db.<collection name>.find('{"created_at":{"$gte":new Date(140013360000000)}}')
即使我在 mongoexport 命令中硬编码 epoch 值,我也得到了一条记录。
mongoexport --host <hostname> --username <username> --password <password> --db <db name> --limit 10 --collection <coll name> --out test-$(date +%Y%m%d).json --query '{created_at:{$gte:new Date(1431561600000)}}'
问题:
- 为什么在 mongo shell 中使用硬编码的 epoch 值运行查询时返回记录(或文档),但在通过 mongoexport 实用程序中的 unix 变量传递时却不返回?
- 有没有办法在查询选项中将今天的日期和时间指定为 00:00:00 而无需将其转换为纪元格式?