2015-05-14 4 views
0

В родном MongoDB следующие ограничения мой полнотекстовый поиск статей, опубликованных в течение последних 6 часов:Узел MongoDB Native - фильтр по дате/времени

db.getCollection('articles').find({ 
    $and: [{ 
     $text: { 
      $search: 'stackoverflow' 
     } 
    }, { 
     $where: function() { 
      return Date.now() - this.published.getTime() < (6 * 60 * 60 * 1000) 
     } 
    }] 
})... 

выше не работает на Node.js с node-mongodb-native - весь объект $, где объект игнорируется, но не вызывает ошибку. Есть ли другой способ ограничить результаты моего запроса в зависимости от времени?

ответ

1

Попробуйте создать объект типа DateTime перед использованием в запросе, построив новую дату со значением текущей временной метки минус 6 часов следующим образом:

var sixHours = 6 * 60 * 60 * 1000; /* ms */ 
    sixHoursAgo = new Date(new Date().getTime() - sixHours); 

db.getCollection('articles').find({ 
    $text: { $search: 'stackoverflow'}, 
    published: { $gte: sixHoursAgo } 
}) 

Или вы могли бы использовать библиотеку momentjs что весьма удобно при работе с датами, в частности, subtract()

+0

Отличное решение. Я заметил, что нет оператора '$ and' - разве это не нужно? –

+1

@FrancisKim Это не обязательно, потому что это становится неявной операцией AND, когда вы указываете список выражений, разделенных запятыми, как указано выше. Использование явного И с оператором [** '$ и' **] (http://docs.mongodb.org/manual/reference/operator/query/and/) необходимо, когда одно и то же поле или оператор должны быть указанных в нескольких выражениях. – chridam

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