MongoDB select 24 小时内最后一个文档
MongoDB select last documents in 24 hours
我正在使用 MongoDB 4.4 版,我正在尝试 return 最近 24 小时内插入的最后文档,我需要 运行 这个查询一天,因此,我没有手动设置日期,我需要使用 new Date()
问题是,当我在过去 24 小时内提出更多参数时,MongoDB return 给我一条错误消息,我尝试了很多方法来解决这个问题,但是什么都没用
这是我的代码
{
"$match" : {
"CreatedAt2" : {
"$gte" : ISODate("2022-04-21")
}
}
}
如果我 运行 这段代码,这工作正常,但如果通过 new Date() 更改字符串,问题就开始了。
在我的测试中,如果像下面这样只放置 new Date() 并通过“$lte”查找,代码运行良好。
'$lte' 只是检查 new Date() 是否有效
"CreatedAt2" : { $lte: new Date() }
因此,如果在过去 24 小时内尝试将值包含在 return 中,我的查询不起作用,请看下面
"CreatedAt2" : { $gte: new Date(new Date().getTime() - 86400000) }
MongoDB给我带来这个错误信息
现在我不知道我需要做什么来解决这个问题。
试试这个
"createdAt2":{$gte:new Date(Date.now() - 86400)
这应该可以正常工作
考虑利用 $$NOW
聚合变量并 $subtract
它通过 24 小时 * 60 分钟 * 60 秒 * 1000 毫秒 = 86400000 毫秒来获取 24 小时内的记录
db.collection.aggregate([
{
"$match": {
$expr: {
$gte: [
"$CreatedAt2",
{
"$subtract": [
"$$NOW",
86400000
]
}
]
}
}
}
])
这里是Mongo playground供大家参考。
除了减去 86400000 毫秒,您还可以使用
db.collection.aggregate([
{
"$match": {
$expr: {
$gte: [
"$CreatedAt2",
{
$dateSubtract: {
startDate: "$$NOW",
unit: "hour",
amount: 24
}
}
]
}
}
}
])
或使用第三方 date-library,例如moment.js
{
"$match" : {
"CreatedAt2" : {
"$gte" : moment().subtract(24, 'hours').toDate()
}
}
}
我正在使用 MongoDB 4.4 版,我正在尝试 return 最近 24 小时内插入的最后文档,我需要 运行 这个查询一天,因此,我没有手动设置日期,我需要使用 new Date()
问题是,当我在过去 24 小时内提出更多参数时,MongoDB return 给我一条错误消息,我尝试了很多方法来解决这个问题,但是什么都没用
这是我的代码
{
"$match" : {
"CreatedAt2" : {
"$gte" : ISODate("2022-04-21")
}
}
}
如果我 运行 这段代码,这工作正常,但如果通过 new Date() 更改字符串,问题就开始了。
在我的测试中,如果像下面这样只放置 new Date() 并通过“$lte”查找,代码运行良好。
'$lte' 只是检查 new Date() 是否有效
"CreatedAt2" : { $lte: new Date() }
因此,如果在过去 24 小时内尝试将值包含在 return 中,我的查询不起作用,请看下面
"CreatedAt2" : { $gte: new Date(new Date().getTime() - 86400000) }
MongoDB给我带来这个错误信息
现在我不知道我需要做什么来解决这个问题。
试试这个
"createdAt2":{$gte:new Date(Date.now() - 86400)
这应该可以正常工作
考虑利用 $$NOW
聚合变量并 $subtract
它通过 24 小时 * 60 分钟 * 60 秒 * 1000 毫秒 = 86400000 毫秒来获取 24 小时内的记录
db.collection.aggregate([
{
"$match": {
$expr: {
$gte: [
"$CreatedAt2",
{
"$subtract": [
"$$NOW",
86400000
]
}
]
}
}
}
])
这里是Mongo playground供大家参考。
除了减去 86400000 毫秒,您还可以使用
db.collection.aggregate([
{
"$match": {
$expr: {
$gte: [
"$CreatedAt2",
{
$dateSubtract: {
startDate: "$$NOW",
unit: "hour",
amount: 24
}
}
]
}
}
}
])
或使用第三方 date-library,例如moment.js
{
"$match" : {
"CreatedAt2" : {
"$gte" : moment().subtract(24, 'hours').toDate()
}
}
}