我尝试使用mongodump命令转储一堆在特定日期创建的记录。这些记录包括一个“ts”字段,它是MongoDB Date()对象。
mongodump接受一个-q参数,该参数可用于运行查询以选择要包含在转储中的记录。不幸的是,-q参数需要在JSON中提供,并且不清楚如何在纯JSON中表达“小于此日期,大于此日期”查询(通常此类查询将使用'new Date()'构造函数)
有什么提示吗?我已经尝试使用{$date:unix-timestamp-in-milliseconds}格式,但它对我不起作用。
9条答案
按热度按时间k4aesqcs1#
我解决了-我在找的咒语是:
mbskvtky2#
一个比@SimonWillison的转义版本更人性化的版本:
--query "{ time: { \$gt: new Date(1312959600000), \$lt: new Date(1313046000000) }}"
(Note美元符号仍然需要转义。)
我通过在shell中创建日期来获得毫秒时间戳,例如:
vd8tlhqk3#
在MongoDB 3.2中,我们可以在mongodump中使用
--queryFile
选项。首先,创建一个json文件:
接下来,使用mongodump:
简单明了。
egmofgnx4#
编辑:固定的错别字
添加更新:
mongodump --query
不支持IsoDate
,但接受毫秒形式的Date
。date
命令在OS X中的行为不同,date -d 2011-08-10 +%s
对我不起作用。如果您遇到相同的问题,请尝试阅读手册或使用此:7vhp5slm5#
这应该可以工作,你的$date查询有什么不起作用?:
oug3syen6#
使用单引号。我发现ISODate()不起作用。
swvgeqrz7#
扩展的JSON格式工作,可以在文档(https://docs.mongodb.com/database-tools/mongodump/)中找到。示例:
--query '{ "timest": { "$gte": { "$date": "2020-08-19T00:00:00.000Z" } } }'
tct7dpnv8#
在我的例子中,我查询了14天前创建的条目,最终得到了这个bash脚本:
mongodump版本:r4.0.12
oymdgrw79#
在
mongodump
版本100中,我无法让以前的解决方案工作。这是一个为我工作的解决方案:
new Date(<your date>).getTime()
。示例:
new Date('2022-07-01').getTime()
-〉1656633600000
queryFile.json
:queryFile
参数来运行mongodump
: