我有一个看起来像这样的文档
{
"_id":ObjectId("5bcef414b4305f4054571305"),
"timestamp": ISODate("2018-10-23T10:12:36.755 Z"),
"config" : {
"expiry_duration" : NumberLong(10000)
}
}
我需要找到已过期的文档,即$datediff(time.Now(), $timestamp)
> config.expiry_duration
我不清楚是否需要使用聚合或是否可以使用自身查找来实现这一点
答案 0 :(得分:1)
您可以使用.find()
方法执行此操作,但需要$expr运算符(在MongoDB 3.6中可用):
db.collection.find({
$expr: {
$gt: [ { $subtract: [ ISODate("2018-10-23T16:39:06.266Z"), "$timestamp" ] }, "$config.expiry_duration" ]
}
})
要获取当前日期,您可以在Mongo shell中键入new Date()
如果您需要MongoDB <3.6的解决方案,则可以使用.aggregate()
和$redact管道阶段:
db.col.aggregate({
$redact: {
$cond: {
if: { $gt: [ { $subtract: [ ISODate("2018-10-23T16:39:06.266Z"), "$timestamp" ] }, "$config.expiry_duration" ] },
then: "$$KEEP",
else: "$$DESCEND"
}
}
})