2014-12-21 23 views
5

próbuję uruchomić to:Mongoexport -q ISODate zapytania

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

Albo to (GTE & lt bez - '):

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

Kwerenda działa dobrze na Robomongo, Ale z mongoexport wyrzuca: "zbyt wiele argumentów pozycyjnych"

Wiem, że zamiast tego mogę uruchomić następujące polecenie, ale nie chcę używać konwertera daty za każdym razem, gdy potrzebuję wykonać zapytanie.

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

Odpowiedz

9

Zapytania mongoexport wymagają użycia rozszerzonego JSON w trybie ścisłym MongoDB. Możesz przeczytać więcej o tym smaku rozszerzonego JSON w podręczniku MongoDB Manual na temat extended JSON. W określonych przypadkach, właściwy sposób pisać pierwsze zapytanie w komendzie mongoexport jest

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' } } }" 
+0

Czy ta odpowiedź jest nadal ważna? Zapytanie za pomocą ciągu znaków zamiast ISODate wydaje się nie zwracać żadnych wyników, podczas gdy dodanie konstruktora ISODate ("") zwróci wyniki - bezpośrednio w powłoce Mongo. W mongoexports dodanie konstruktora ISODate ("") (lub JS Date) powoduje błąd. – netpoetica

+1

Wygląda na to, że działa to poprawnie, ale znacznik czasu może być bardzo wyraźny. Czas epoki musi być sformatowany tak, aby zawierał milisekundy i czas iso (jako łańcuch jak wyżej) * musi * zawierać mikrosekundy. – netpoetica

+0

Dodatkowo, jeśli napiszesz znacznik czasu jak "2015-10-18T00: 00: 00Z00: 00", wówczas mongoexport będzie narzekał na dodatkowy tekst: 00:00. – forgetso

3

Kiedyś odpowiedź @ wdberkeley jako punkt wyjścia, ale ta data szczególności ciąg nie działa dla mnie. Musiałem użyć litery "T", aby oddzielić datę i godzinę:

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