MongoDB汇总通过使用Epoch当前时间戳获得过期的记录

发布于 2025-01-22 08:52:26 字数 1123 浏览 0 评论 0原文

    { 
      "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"
    }

我需要根据当前的时期时间戳IE获取过期的记录 (topicheader.replaydata.messageateateinms + topicheader.replaydata.messagedelayinms)< = epoch current timestamp

我能够通过使用FIND()来解决我能够解决的(),但是试图找到更好的解决方案,因此不会引起任何绩效问题:

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

先感谢您。

    { 
      "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"
    }

i need to get the expired records based on current epoch timestamp i.e.
(topicHeader.replayData.messageDateInms + topicHeader.replayData.messageDelayInms) <= epoch current timestamp

I am able to resolve by using find() but trying to find better solution so it wont cause any performance issue:

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

Thank you in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

靖瑶 2025-01-29 08:52:26

使用$ add总结两个字段。使用$ TODATE将它们投入到date字段中,并与$$现在进行比较

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

这是 mongo playground 供您参考。

Use $add to sum up the 2 fields. Use $toDate to cast them into date field and compare with $$NOW

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

Here is the Mongo playground for your reference.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文