我想限制我正在制作的查询,只查看过去24小时内创建的文档。
构建此查询的最佳方法是什么?我如何根据日期进行限制?
答案 0 :(得分:18)
添加createdAt
字段,将其编入索引,然后查询
db.getCollection("COLLECTION_NAME").find({"createdAt":{$gt:new Date(Date.now() - 24*60*60 * 1000)}})
这将返回所有早于86400秒的记录。
答案 1 :(得分:17)
如果您没有使用任何其他索引,并且使用默认的ObjectID作为_id,则可以执行以下操作:
var ObjectID = require('mongodb').ObjectID
db.collection.find({
_id: {
$gt: ObjectID.createFromTime(Date.now() / 1000 - 24*60*60)
}
}, callback)
答案 2 :(得分:8)
对于通过谷歌登陆此处的其他人,您可以在mongo shell中执行此操作,如下所示:
db.collection.find({ $where: function () { return Date.now() - this._id.getTimestamp() < (24 * 60 * 60 * 1000) } })
答案 3 :(得分:6)
在mongoose中使用
let ObjectId = require('mongodb').ObjectID;
Property.find({
_id: {
$gt: ObjectId.createFromTime(Date.now() / 1000 - 24 * 60 * 60)
}
}, (err, result) => {
console.log(err || result);
});
答案 4 :(得分:3)
首先,如果你能为人们提供你收藏的模式,那将会非常有帮助。
但是因为它已经过了3个小时而且没有人回答我会尝试:
假设您有条目并且它有一个创建的字段,它是一个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
}
});
答案 5 :(得分:1)
&#34; TIME&#34;是存储时间戳的字段
db.your_collection_name.find({"TIME":{'$lt': new Date(),'$gte':new Date(new Date().setDate(new Date().getDate()-1))}},{}).count();
答案 6 :(得分:0)
希望这对某人有帮助。我正在使用pymongo查询最近24小时的数据。就我而言,我必须将当前时间转换为BSON时间戳。
首先,我必须导入Bson时间戳:
from bson.timestamp import Timestamp
然后在搜索查询中,我执行了以下操作:
yesterday = datetime.datetime.now() - datetime.timedelta(days=1)
findQuery = {
"unix": {
"$gte": Timestamp(int(yesterday.strftime("%s")),0)
}
}
答案 7 :(得分:0)
我遇到了同样的问题,经过大量搜索,我找到的用于获取过去 X 天数据的最佳解决方案如下:
let date_obj = new Date();
let requestedTime = new Date(new Date().setDate(date_obj.getDate() - day));
db.collection.find({
createdAt: {$gt: requestedTime}
});
day 变量必须是您想要的天数的数值,例如:1 表示一天前(过去 24 小时),2 表示两天前(过去 48 小时),30 表示上个月,最近两个月 60,以此类推。 ..
let date_obj = new Date();
let requestedTime = new Date(new Date().setDate(date_obj.getDate() - 1));
document.querySelector("#current_date").innerHTML = `current date: ${date_obj}`
document.querySelector("#last_24H_date").innerHTML = `last 24 hours: ${requestedTime}`
<div id="current_date"></div>
<div id="last_24H_date"></div>
答案 8 :(得分:0)
从 extension=mysqli
release schedule
开始,这将是新的 $dateDiff
聚合运算符的一个很好的用例:
Mongo 5.0
注意事项:
基本上,我们// { "_id" : ObjectId("60c8f804fb832fe2f2011657") }
db.collection.aggregate([
{ $match: { $expr:
{ $lt: [{ $dateDiff: { startDate: "$_id", endDate: "$$NOW", unit: "hour" } }, 24 ]}
}}
])
// { "_id" : ObjectId("60c8f804fb832fe2f2011657") } // if document created within the last 24 hours
处理的项目的创建日期(由其 $match
表示)和现在($dateDiff
}) 小于 (_id
) 比 $$NOW
$lt
。
开始日期是 24
(ObjectId
):
hours
包含其创建的时间戳$_id
可以接受 ObjectId
作为时间表示结束日期为 $$NOW
,这是一个返回当前日期时间值的变量。
答案 9 :(得分:0)
db.video.find({"timestamp":{$lt: new Date(),$gte: new Date(new Date().setDate(new Date().getDate()-1))}})