MongoDB: получать только документы, созданные за последние 24 часа?

Я хочу ограничить запрос, который я делаю, чтобы смотреть только в документах, которые были созданы за последние 24 часа.

Каков наилучший способ структурирования этого запроса? Как мне ограничиться в зависимости от даты?

Ответы

Ответ 1

Если вы не используете какие-либо другие индексы и используете ObjectID по умолчанию как ваш _id, вы можете сделать следующее:

db.collection.find({
  _id: {
    $gt: ObjectID.createFromTimestamp(Date.now()*1000 - 24*60*60)
  }
}, callback)

Ответ 2

Добавить поле createdAt, проиндексировать его, затем запросить

db.getCollection("COLLECTION_NAME").find({"createdAt":{$gt:new Date(Date.now() - 24*60*60 * 1000)}})

Это вернет все записи старше 86400 секунд.

Ответ 3

Для всех, кто приземляется здесь через google, вы можете сделать это в оболочке mongo следующим образом:

db.collection.find({ $where: function () { return Date.now() - this._id.getTimestamp() < (24 * 60 * 60 * 1000)  }  })

Ответ 4

Используйте это в мангусте

let ObjectId    = require('mongodb').ObjectID;

Property.find({
    _id: {
        $gt: ObjectId.createFromTime(Date.now() / 1000 - 24 * 60 * 60)
    }
}, (err, result) => {
    console.log(err || result);
});

Ответ 5

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

Но только потому, что прошло уже 3 часа, и никто не ответил, я попробую:

Предположим, что у вас есть запись, и у нее есть поле createdAt, которое является ISODate:

{
somefield: "test",
createdAt: ISODate("2012-08-13T04:00:00Z")
}

Итак, что вам нужно сделать, это поместить индекс в это поле

db.yourColl.ensureIndex({createdAt:1});

Затем вы получите свое текущее время в node.js, замените свои 24 часа и получите свое начало. (Насколько я знаю, в mongdb нет аналога NOW. Верно мне, если я ошибаюсь.)

db.yourColl.find({
   createdAt: {
     $gte: start
   }
});

Ответ 6

"ВРЕМЯ" - это поле, в котором хранится метка времени

db.your_collection_name.find({"TIME":{'$lt': new Date(),'$gte':new Date(new Date().setDate(new Date().getDate()-1))}},{}).count();