Если вы хотите получить все новые вещи за последние 5 минут, вам придется сделать некоторые расчеты, но это не сложно ...
Сначала создайте индекс для свойства, которому хотите соответствовать (укажите направление сортировки -1 для убывания и 1 для возрастания)
db.things.createIndex({ createdAt: -1 }) // descending order on .createdAt
Затем запросите документы, созданные за последние 5 минут (60 секунд * 5 минут) .... поскольку javascript .getTime()
возвращает миллисекунды, вам нужно умножить на 1000, прежде чем использовать его в качестве входных данных для new Date()
конструктора.
db.things.find({
createdAt: {
$gte: new Date(new Date().getTime()-60*5*1000).toISOString()
}
})
.count()
Объяснение для new Date(new Date().getTime()-60*5*1000).toISOString()
выглядит следующим образом:
Сначала мы вычисляем «5 минут назад»:
new Date().getTime()
дает нам текущее время в миллисекундах
- Мы хотим вычесть 5 минут (в мс) из этого:
5*60*1000
- Я просто умножить на 60
секунды, чтобы его было легко изменить. Я могу просто поменять 5
на120
, если я хочу 2 часа (120 минут).
new Date().getTime()-60*5*1000
дает нам 1484383878676
(5 минут назад в мс)
Теперь нам нужно передать это в new Date()
конструктор, чтобы получить формат строки ISO, требуемый временными метками MongoDB.
{ $gte: new Date(resultFromAbove).toISOString() }
(запрос mongodb .find ())
- Поскольку у нас не может быть переменных, мы делаем все это за один раз:
new Date(new Date().getTime()-60*5*1000)
- ... затем преобразовать в строку ISO:
.toISOString()
new Date(new Date().getTime()-60*5*1000).toISOString()
дает нам 2017-01-14T08:53:17.586Z
Конечно, с переменными это немного проще, если вы используете драйвер node-mongodb-native, но это работает в оболочке mongo, которую я обычно использую для проверки.