Mongoexport -q ISODate查询

16

我正在尝试运行这个:

mongoexport.exe -h *MYHOST* -p *MYPORT* -q "{'time':{'$gte': ISODate('2014-12-21 12:57:00.506Z'),'$lt': ISODate('2014-12-21 12:59:00.506Z')}}"

或者这个(没有-的gte & lt):

mongoexport.exe -h *MYHOST* -p *MYPORT* -q {'time':{$gte: ISODate('2014-12-21 12:57:00.506Z'),$lt: ISODate('2014-12-21 12:59:00.506Z')}}

在Robomongo上查询正常,但mongoexport会抛出“太多的位置参数”的错误。

我知道我可以每次需要执行查询时都运行以下命令,但我不想每次都使用日期转换器。

mongoexport.exe -h *MYHOST* -p *MYPORT* -q "{'time':{$gte: new Date(14191
66620506),$lt: new Date(1419166740506)}}"

这是一个较新的问题的副本,使用mongoexport和--query查询ISODate,该问题有更好的答案。 - Dan Dascalescu
6个回答

23

mongoexport查询需要使用严格模式的MongoDB扩展JSON。您可以在MongoDB手册的扩展JSON文章中了解有关扩展JSON这种类型的更多信息。在您的特定情况下,编写mongoexport命令中的第一个查询的正确方法是

mongoexport.exe -h *MYHOST* -p *MYPORT* -q "{ 'time' : { '$gte' : { '$date' : '2014-12-21 12:57:00.506Z' },'$lt' : { '$date' : '2014-12-21 12:59:00.506Z' } } }"

这个答案还有效吗?使用字符串查询似乎无法返回任何结果,而添加ISODate("")构造函数将返回结果 - 直接在mongo shell中。在mongoexports中,添加ISODate("")(或JS日期对象)构造函数会导致错误。 - netpoetica
1
看起来这个程序可以正常工作,但是时间戳可能会非常棘手。Epoch时间必须格式化以包括毫秒和iso时间(如上所示的字符串)必须包含微秒。 - netpoetica
此外,如果您将时间戳写成“2015-10-18T00:00:00Z00:00”,那么mongoexport会抱怨有额外的文本:00:00。 - forgetso
7
在 Mac 上我无法使其工作。我必须使用以下命令:mongoexport -d myDb -c myCollection -q '{ "timestamp" : { "$gte" : { "$date" : "2015-11-01T12:57:00.000Z" }}}' 注意:双引号必须在字符串内部,单引号在外部。 - Ron Wertlen
这不是Mongo 3.x的有效答案。 - Christian Dechery

9

我以@wdberkeley的答案为起点,但那个日期字符串对我不起作用。我必须使用“T”来分隔日期和时间:

mongoexport --username user --password pass --host host --db dbName --collection coll --type=csv --query '{"_created_at": { "$gte" : { "$date" : "2017-12-21T12:57:00.506Z" } }}'

1

我在使用mongo 2.4时遇到了同样的问题,你需要使用 $date,并且使用“64位有符号整数表示毫秒”(https://docs.mongodb.com/v2.4/reference/mongodb-extended-json/

mongoexport.exe -h *MYHOST* -p *MYPORT* -q "{'time':{'$gte':{"$date": 1419166620506},'$lt': {"$date": 1419166740506}}"

1

在Windows中必须使用不同的语法。

mongoexport --host 192.168.1.5 --db dbname --collection files --query "{ "ModifyDate" : { "$lte" : { "$date" : '2019-02-17T00:00:00.000Z' } }}"

区别在于日期周围有单引号。

0

我在Windows上安装了mongoexport 3.6.1版本。我必须像Fabien Haddadi一样使用Git Bash,但在我的情况下,需要使用毫秒级日期。

-query '{ "Time": { "$gte": new Date(1609455600000)} }' 

0

2021年底更新针对Windows系统:

考虑使用Git Bash来运行,因为我无法使其在Windows终端中正常工作

mongoexport --hostname=$MYHOST --password=$MYPWD --query='{"time":{"$gte":{"$date":"2014-12-21 12:57:00.506Z"},"$lt":{"$date":"2014-12-21 12:59:00.506Z"}}}' mongodb://IP --out=myoutfile.json


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接