mongoexport и даты

У монго есть довольно удобная утилита mongoexport. Как понятно из названия и инструкции она позволяет выгрузить содержимое базы монго в фай формата JSON. При этом есть возможность указать конкретную коллекцию, из которой будет делаться выгрузка. А очень удобный параметра -q позволяет указать условия в формате JSON, в согласии с которым будут выбрана записи для экспорта.

Т.е. это позволяет не выгружать всю коллекцию целиком, например для отладке на тестовом сервере, а получить только «проблемные» записи. Но тут есть подводные камни связанные с датами. Как выяснилось mongoexport не совсем корректно обрабатывает запросы с датами. Если в mongo shell нет проблем с использованием ISODate и различными вариантами new Date, то mongoexport обрабатывает такие запросы не совсем корректно.

Итак есть следующие особенности mongoexport при работе с датами:
1. Не понимает использование ISODate
2. Возможно использовать таймштамп. Только надо помнить, что используется обычный UNIX timestamp и к нему приписываются «000» — миллисекунды. Но работает не всегда.
3. Не все методы вызова new Date() обрабатываются нормально. Рабочий, вариант который я нашел, это использование new Date(time). Где time это таймштамп сформированный по правилам описанным в предудыщем пункте. Либо таймштамп можно получить в консоли mongo

>new Date(2014, 3, 16).getTime()

В результате получи таймштамп для данной даты, который уже можно использовать в запросе с параметром -q в утилите mongoexport.

ВАЖНО: в Date указываются последовательно год, месяц и день. При этом месяц считается с нуля. Т.е. 0 это январь, а 3 апрель.

Так что надо быть внимательней. И проверять полученный таймштамп там же в консоли mongo, передав его как единственный параметр для new Date().

Запись опубликована в рубрике Работа с метками , . Добавьте в закладки постоянную ссылку.

Добавить комментарий