Mongoexport с ограничениями $и $lt в диапазоне дат - программирование
Подтвердить что ты не робот

Mongoexport с ограничениями $и $lt в диапазоне дат

Я пытаюсь получить заказы, сделанные в течение определенного дня из моего mongodb, используя следующий вызов mongoexport:

mongoexport --db store --collection user_data --query "{'order.created_order':{$gt:ISODate("2013-02-05T00:00:00.000Z"),$lt:ISODate("2013-02-06T00:00:00.000Z")}, 'order.status':'paid'}" --out ordersfeb6.json

но в настоящее время я испытываю следующую ошибку:

Thu Feb  7 18:33:43 Assertion: 10340:Failure parsing JSON string near: 'order.cre
0x56a223 0x5712e5 0x53e0f7 0x53e21e 0x8b7739 0x524f2b 0x5258a3 0x7fa7b77bd76d 0x525975 
mongoexport(_ZN5mongo15printStackTraceERSo+0x23) [0x56a223]
mongoexport(_ZN5mongo11msgassertedEiPKc+0xc5) [0x5712e5]
mongoexport(_ZN5mongo8fromjsonEPKcPi+0x377) [0x53e0f7]
mongoexport(_ZN5mongo8fromjsonERKSs+0xe) [0x53e21e]
mongoexport(_ZN6Export3runEv+0x489) [0x8b7739]
mongoexport(_ZN5mongo4Tool4mainEiPPc+0x72b) [0x524f2b]
mongoexport(main+0x23) [0x5258a3]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed) [0x7fa7b77bd76d]
mongoexport() [0x525975]
assertion: 10340 Failure parsing JSON string near: 'order.cre

Из этого вопроса mongoexport JSON ошибка синтаксического анализа Я знаю, что javascript используется для оценки некоторых частей запросов mongo. Мне было интересно: нужны ли функции $gt и $lt javascript, и это моя проблема? Если нет, я не уверен, что не так с моим запросом, и любые предложения будут очень благодарны. Спасибо за чтение!

4b9b3361

Ответ 1

Проблема заключается в том, как вы представляете даты, они должны быть переданы как типы Date и в формате epoch. Вместо этого попробуйте:

mongoexport --db store --collection user_data --query '{"order.created_order":{$gt:new Date(1360040400000),$lt:new Date(1360990800000)}, "order.status" : "paid"}' --out ordersfeb6.json

Если вы хотите конвертировать ISODate в эпоху, просто введите дату в оболочке, что-то вроде этого:

> new Date(2013,01,16)*1
1360990800000

Тогда для проверки:

> new Date(1360990800000)
ISODate("2013-02-16T05:00:00Z")

Обновление: Как отмечено в комментариях imcaptor, месяц основан на нулевом значении (0 = Jan, 11 = Dec) в конструкторе Date не то, что большинство ожидает, и легко забыть. Я прошел в 01 в приведенном выше примере и получил февральскую дату, как вы можете видеть в ISODate из проверки.