Mongodb聚合使用epoch当前时间戳获取过期记录

Mongodb aggregate get the expired records by using the epoch current timestamp

    { 
      "id" : "58", 
        "topicHeader" : {
            "replayData" : {
                "messageDateInms" : NumberLong(1649448201357), 
                "messageDelayInms" : NumberLong(600000)
            }
        }, 
      "status" : "IN_PROGRESS"
    },
    
    { 
      "id" : "59", 
        "topicHeader" : {
            "replayData" : {
                "messageDateInms" : NumberLong(1650220023677), 
                "messageDelayInms" : NumberLong(600000)
            }
        }, 
      "status" : "IN_IROGRESS"
    }

我需要根据当前纪元时间戳获取过期记录,即 (topicHeader.replayData.messageDateInms + topicHeader.replayData.messageDelayInms) <= epoch current timestamp

我可以使用 find() 来解决问题,但我正在尝试找到更好的解决方案,因此它不会导致任何性能问题:

    db.getCollection("col1").find
        ({
            $expr: {
                $lte: [{ "$add": ["$topicHeader.replayData.messageDateInms", "$topicHeader.replayData.messageDelayInms"] }, 1650226443611]
            }
        })

提前致谢。

使用$add总结2个字段。使用 $toDate 将它们转换为 date 字段并与 $$NOW

进行比较
db.collection.aggregate([
  {
    "$match": {
      $expr: {
        $lte: [
          {
            $toDate: {
              "$add": [
                "$topicHeader.replayData.messageDateInms",
                "$topicHeader.replayData.messageDelayInms"
              ]
            }
          },
          "$$NOW"
        ]
      }
    }
  }
])

这里是Mongo playground供您参考。