2014-12-21 5 views
5

Я пытаюсь запустить это:Mongoexport -q ISODate запрос

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 & л без - '):

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

ответ

9

Запросы mongoexport требуют использования расширенного JSON в режиме MongoDB строгого режима. Вы можете больше узнать об этом аромате расширенного JSON в статье руководства MongoDB по адресу extended 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' } } }" 
+0

Действительно ли этот ответ действителен? Запросы по строкам вместо ISODate, похоже, не возвращают никаких результатов, тогда как добавление конструктора ISODate ("") возвращает результаты - непосредственно в оболочке mongo. В mongoexports добавление конструктора ISODate ("") (или объекта JS Date) вызывает ошибку. – netpoetica

+1

Похоже, что это будет работать правильно, но временная метка может быть очень тонкой. Время Epoch должно быть отформатировано для включения миллисекунд и iso time (как строка, как указано выше) * must * содержит микросекунды. – netpoetica

+0

Кроме того, если вы пишете временную метку типа «2015-10-18T00: 00: 00Z00: 00», то mongoexport будет жаловаться на дополнительный текст: 00:00. – forgetso

3

Я использовал ответ @ wdberkeley в качестве отправной точки, но, что особенно строка даты не работает для меня. Мне пришлось использовать «Т», чтобы отделить дату и время:

mongoexport --username user --password pass --host host --db dbName --collection coll --type=csv --query '{"_created_at": { "$gte" : { "$date" : "2017-12-21T12:57:00.506Z" } }}' 
Смежные вопросы