Кажется, я не могу заставить даже самый простой запрос даты работать в MongoDB. С документом, который выглядит примерно так:
{
"_id" : "foobar/201310",
"ap" : "foobar",
"dt" : ISODate("2013-10-01T00:00:00.000Z"),
"tl" : 375439
}
И запрос, который выглядит так:
{
"dt" : {
"$gte" : {
"$date" : "2013-10-01T00:00:00.000Z"
}
}
}
Я получаю 0 результатов от выполнения:
db.mycollection.find({
"dt" : { "$gte" : { "$date" : "2013-10-01T00:00:00.000Z"}}
})
Есть идеи, почему это не работает?
Для справки: этот запрос создается MongoTemplate Spring, поэтому у меня нет прямого контроля над запросом, который в конечном итоге отправляется в MongoDB.
(PS)
> db.version()
2.4.7
Спасибо!
Query
объект весной. Сериализованная форма запроса не обязательно является допустимым запросом, который вы можете просто скопировать / вставить в оболочку mongo, что само по себе несколько расстраивает. Виновник здесь: grepcode.com/file/repo1.maven.org/maven2/org.mongodb/…new Date('2016-03-09')
наISODate('2016-03-09')
. Первый будет возвращать даты в прошлом для$gte
запроса.Со страницы кулинарной книги MongoDB комментарии:
Это сработало для меня. В полном контексте следующая команда получает каждую запись, в которой
dt
поле даты имеет дату 2013-10-01 (ГГГГ-ММ-ДД) Зулу:источник
datetime.datetime
эквивалентноISODate
.Попробуй это:
источник
Я использую robomongo в качестве клиентского интерфейса mongodb, и ниже работает для меня
На стороне приложения я использую основанный на nodejs драйвер mongodb (v1.4.3), приложение использует datepicker в пользовательском интерфейсе, который дает дату как YYYY-mm-dd, затем к ней добавляется время по умолчанию, например, 00:00:00, а затем в
new Date()
конструктор, а затем предоставляется объекту критериев mongodb, я думаю, что драйвер преобразует дату в дату ISO, и тогда запрос работает и дает желаемый результат, однако тот жеnew Date()
конструктор не работает или не показывает тот же результат в robo mongo для того же критерии, что странно, так как я использовал robomongo для перекрестной проверки моих критериев объектов.В то время как кли по умолчанию mongoshell хорошо работает с обоими
ISODate
иnew Date()
источник
В строгом режиме JSON вы должны будете сохранить порядок:
Единственное, что сработало для определения моих поисковых запросов на mlab.com.
источник
В оболочке MongoDB:
В моем коде nodeJS (используя Mongoose)
Я запрашиваю мою коллекцию событий датчика, чтобы она возвращала значения, в которых поле «от» больше указанной даты
источник
это мой документ
теперь я хочу найти каждый 27-й документ даты. так что я использовал это ....
это сработало для меня.
источник
Это сработало для меня при поиске значения меньше или равно, чем сейчас:
источник
Оберните это
new Date()
:источник
Старый вопрос, но все же первый гугл хит, поэтому я выложу его здесь, чтобы мне было легче найти его снова ...
Используя Mongo 4.2 и aggregate ():
Это дает вам переменную groupby в качестве даты, иногда лучше использовать как компоненты.
источник