Mongoexport -q ISODate query
Asked Answered
S

6

16

I'm trying to run this:

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')}}"

Or this(the gte & lt without - ' ):

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')}}

The query works fine on Robomongo, But with mongoexport it throws: "too many positional arguments"

I know I can run the following instead, But I don't want to use the date converter everytime I need to execute a query.

mongoexport.exe -h *MYHOST* -p *MYPORT* -q "{'time':{$gte: new Date(14191
66620506),$lt: new Date(1419166740506)}}"
Shanks answered 21/12, 2014 at 16:3 Comment(1)
Duplicate of this newer question, Use mongoexport with a --query for ISODate, which has better answers.Courtroom
D
23

mongoexport queries require the use of strict-mode MongoDB extended JSON. You can read more about that flavor of extended JSON in the MongoDB Manual article on extended JSON. In your specific case, the proper way to write the first query in the mongoexport command is

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' } } }"
Dorsiventral answered 25/12, 2014 at 19:5 Comment(5)
Is this answer still valid? Querying by string instead of ISODate seems not to return any results whereas adding ISODate("") constructor will return results - in the mongo shell directly. In mongoexports, adding ISODate("") (or JS Date object) constructor causes an error.Jane
It appears that this will work properly, but the timestamp can be very finicky. Epoch time must be formatted to include milliseconds and iso time (as string like above) must contain microseconds.Jane
Additionally, if you write the timestamp like "2015-10-18T00:00:00Z00:00" then mongoexport will complain about extra text: 00:00.Gamp
On Mac I could not get this to work. I had to use: mongoexport -d myDb -c myCollection -q '{ "timestamp" : { "$gte" : { "$date" : "2015-11-01T12:57:00.000Z" }}}' Note: the double quotes had to be inside the string, with single quotes outside.Twobyfour
This is not a valid answer for mongo 3.x.Superstructure
J
9

I used @wdberkeley's answer as a starting point but that particular date string did not work for me. I had to use a 'T' to separate the date and the time:

mongoexport --username user --password pass --host host --db dbName --collection coll --type=csv --query '{"_created_at": { "$gte" : { "$date" : "2017-12-21T12:57:00.506Z" } }}'
Janae answered 1/3, 2017 at 22:6 Comment(0)
D
1

Had to use a different syntax in windows.

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

Difference being the single quotes around the date.

Dreamy answered 17/2, 2019 at 6:31 Comment(0)
B
1

I had the same problem with mongo 2.4, you need to use $date with "a 64-bit signed integer for milliseconds" (https://docs.mongodb.com/v2.4/reference/mongodb-extended-json/) in your case:

mongoexport.exe -h *MYHOST* -p *MYPORT* -q "{'time':{'$gte':{"$date": 1419166620506},'$lt': {"$date": 1419166740506}}"
Brendabrendan answered 6/6, 2019 at 0:33 Comment(0)
K
0

Update for Late 2021 for Windows:

Consider Git Bash to run it, as I was not able to make it work in Windows Terminal

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

Kendre answered 30/9, 2021 at 11:5 Comment(0)
R
0

I have mongoexport version 3.6.1 on Windows. I have to use Git Bash as Fabien Haddadi but in my case works with date in milliseconds

-query '{ "Time": { "$gte": new Date(1609455600000)} }' 
Remex answered 14/10, 2021 at 15:29 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.