Если вы хотите получить все новые вещи за последние 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, которую я обычно использую для проверки.