Ответ 1
Если вы не используете какие-либо другие индексы и используете ObjectID по умолчанию как ваш _id, вы можете сделать следующее:
db.collection.find({
_id: {
$gt: ObjectID.createFromTimestamp(Date.now()*1000 - 24*60*60)
}
}, callback)
Я хочу ограничить запрос, который я делаю, чтобы смотреть только в документах, которые были созданы за последние 24 часа.
Каков наилучший способ структурирования этого запроса? Как мне ограничиться в зависимости от даты?
Если вы не используете какие-либо другие индексы и используете ObjectID по умолчанию как ваш _id, вы можете сделать следующее:
db.collection.find({
_id: {
$gt: ObjectID.createFromTimestamp(Date.now()*1000 - 24*60*60)
}
}, callback)
Добавить поле createdAt
, проиндексировать его, затем запросить
db.getCollection("COLLECTION_NAME").find({"createdAt":{$gt:new Date(Date.now() - 24*60*60 * 1000)}})
Это вернет все записи старше 86400 секунд.
Для всех, кто приземляется здесь через google, вы можете сделать это в оболочке mongo следующим образом:
db.collection.find({ $where: function () { return Date.now() - this._id.getTimestamp() < (24 * 60 * 60 * 1000) } })
Используйте это в мангусте
let ObjectId = require('mongodb').ObjectID;
Property.find({
_id: {
$gt: ObjectId.createFromTime(Date.now() / 1000 - 24 * 60 * 60)
}
}, (err, result) => {
console.log(err || result);
});
в первую очередь это действительно поможет, если вы предоставите людям схему вашей коллекции.
Но только потому, что прошло уже 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
}
});
"ВРЕМЯ" - это поле, в котором хранится метка времени
db.your_collection_name.find({"TIME":{'$lt': new Date(),'$gte':new Date(new Date().setDate(new Date().getDate()-1))}},{}).count();