在 Mongodb 中,我有一个任务集合,其中包含以下字段以及其他 25 个字段
1. timeToLive - holds the number of minutes
2. createdDate - holds the ISODate
我需要编写一个查询,它只会返回未过期的任务。我正在尝试类似以下内容:
db.tasks.find({"timeToLive":{$gt:((new Date().getTime()-createdDate)/60000)}},{_id:1, createdDate:1, timeToLive:1})
问题是 mongo 无法将 $gt 表达式中的createdDate 识别为文档中的字段。我收到以下错误:
2015-05-16T16:47:03.573-0400 E QUERY ReferenceError: createdDate is not defined at (shell):2:48
如何在那里写入字段名称,以便将其视为字段而不是变量?我尝试将字段名称放在双引号中,但随后它被视为字符串文字。
感谢任何帮助。
最佳答案
您无法在常规 MongoDB 查找查询中执行此操作。但幸运的是,使用 Mongo 的聚合框架可以通过以下方式达到您想要的结果:
db.tasks.aggregate([
{$project:
{
timeToLive: 1,
createdDate: 1,
expired:
{
$gt: [
{
$divide: [
{
$subtract: [new Date(), "$createdDate"]
},
60000
]
},
"$timeToLive"
]
}
}
},
{$match:
{
expired: false
}
},
{$project:
{
timeToLive: 1,
createdDate: 1
}
}
])
关于mongodb - 如何在 Mongodb 中的查询评估条件表达式中使用字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30280646/