mongodb find的lt运算符能否将document字段用作参数

时间:2018-10-23 11:30:27

标签: mongodb

我有一个看起来像这样的文档

{
   "_id":ObjectId("5bcef414b4305f4054571305"),
   "timestamp":   ISODate("2018-10-23T10:12:36.755   Z"),
   "config" : {
       "expiry_duration" : NumberLong(10000)
    }
}

我需要找到已过期的文档,即$datediff(time.Now(), $timestamp)> config.expiry_duration

我不清楚是否需要使用聚合或是否可以使用自身查找来实现这一点

1 个答案:

答案 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"
        }
    }
})