2016-12-02 2 views
-1

У меня есть поле с именем startDate в mongoDb, тип данных которого является строкой, в которой значения хранятся в формате 11 июня 2016 года. Следующий запрос меньше влияет на find() из-за строкового типа данных. Я знаю, что было бы лучше, если бы тип данных startDate был Date.Сравнение даты при извлечении данных

"startDate": { 
$gte: "01-jun-2016" 
} 

Как я могу сравнить даты?

+2

Мы обычно используем Moment.js для такой вещи: http://momentjs.com/ – uzilan

+0

В MYSQL в новый столбец может быть создан с типом данных Date, затем для сравнения используется новый столбец. Посмотрите, возможно ли это в MongoDB. –

+0

@uzilan Да, импульс хорош при форматировании строки на сегодняшний день. Я сомневаюсь, что при запросе. Поправьте меня, если я ошибаюсь. –

ответ

0

Вы не можете найти дату с этим форматом в монго, вам необходимо получить записи, а затем сравнить. Дата должна быть магазин в формате ISO8061

0

Самый лучший вариант для нормализуют (или добавить) startDate поле в ISODate индексируемой поле для запроса:

db.yourcollection.find({"startDate": {$gte: ISODate("2016-06-01")}, ...); 

As (медленный) альтернативы вы можете использовать $where команды для пользовательского Comparation (он вычисляет код JS и не может воспользоваться индексами):

db.yourcollection.find({ $where: function() { return .... } }, ...); 

Или некоторые взломы с использованием $regex выражений или использовать Aggregation framework для выполнения некоторого Hacky преобразования даты с $ проекта и фильтром с $ матча ...

Смежные вопросы