Лучший способ получить документы в определенный период времени MongoDB

Я создаю скрипт, который будет запускаться каждые x минут и должен собирать данные из MongoDB по временным меткам.

Например, как мне сопоставить документы с агрегацией, которые имеют отметку времени в следующем временном интервале:

start_time = current_time - 60 min
end_time = start_time + 30 min

И мне нужно будет получить все документы, которые остаются в пределах этого срока. Объекты MongoDB имеют временные метки ISODate.

Спасибо!


person E. Muuli    schedule 24.05.2017    source источник


Ответы (2)


Вы можете создавать объекты даты в оболочке mongo следующим образом:

db.getCollection('order').aggregate([
{
$match : { 
    start_time : {$gte :  new Date(ISODate().getTime() - 1000 * 60 * 60)},
    end_time : {$lte :  new Date(ISODate().getTime() + 1000 * 60 * 30)}
    }
}
...
])

Вы можете использовать это в совокупности, а также в обычных поисковых запросах.

Обратите внимание, что я написал это без тестирования, поэтому в нем могут быть синтаксические ошибки.

person p.streef    schedule 24.05.2017
comment
Благодарю вас! Именно то, что мне было нужно! - person E. Muuli; 24.05.2017

db.collection.find({"createdAt": {$gt: новая дата('2017-04-25')},"updatedAt":{$lt:новая дата('2017-06-25')}})

updatedAt и createdAt — это поля, которые я взял во время разработки схемы по отметке времени. Вы можете дать поля в соответствии с вашим дизайном.

в этом случае поисковый запрос будет немного лучше, чем агрегатный, поскольку не нужно выполнять никаких сложных функций.

person aaditya    schedule 25.05.2017