Java Mongo模板中同一数据库中的Mongo DB日期差异和查询条件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java Mongo模板中同一数据库中的Mongo DB日期差异和查询条件相关的知识,希望对你有一定的参考价值。

嗨,我正在尝试进行如下查询

更新日期超过2小时,然后status = inprogress获取所有任务。查询样本日期为


    "_id" : "ATK-l64KC3vm",
    "nodeid" : "NOD-AJaodNfH",
    "accountid" : "d983356b-7fde-4683-9ba5-e6b6f5a0680d",
    "applicationid" : "59a57cb7-7d67-4d55-bd6c-ff537bcf05d6",
    "avmdepid" : "DEP-1aa81899",
    "instanceId" : "INS-YNXr1ldB",
    "cloudinstanceid" : "",
    "inputxml" : "",
    "status" : "No value present",
    "callbackUrl" : "",
    "callbackMethod" : "PUT",
    "callbackInput" : "<input></input>",
    "priority" : "false",
    "type" : "datapush",
    "createdDt" : ISODate("2020-05-20T05:56:55.467Z"),
    "updatedDt" : ISODate("2020-05-20T05:56:55.478Z"),
    "agentid" : "IAG-R2koJqnk"

请帮助在Java Mongo模板聚合过滤器中进行此查询

答案

首先,我们可以使用$addFields$set在文档中添加新字段(临时字段),以保留时差。 (以毫秒为单位)

db.collectionName.aggregate(["$addFields":"timeDiff": $subtract: [new Date(), "$updatedDt"]]);

现在,我们将使用这些字段来过滤记录。

db.collectionName.aggregate(["$addFields":"timeDiff": $subtract: [new Date(), "$updatedDt"],**$match:'timeDiff':$gte: 2* 60* 60* 1000,'status':'in-progress'**]);

现在,我们可以删除附加添加的字段

db.collectionName.aggregate(["$addFields": "timeDiff":  $subtract: [new Date(), "$updatedDt"],  $match:'timeDiff':$gte: 2* 60* 60* 1000,'status':'in-progress',**$project: 'timeDiff':0**]);

以上是关于Java Mongo模板中同一数据库中的Mongo DB日期差异和查询条件的主要内容,如果未能解决你的问题,请参考以下文章

根据特定日期和时间从数据池中的 mongo 集合中过滤数据在同一天的不同时间

根据同一文档中的另一个数组查询 Mongo 文档数组

Mongo:如果孩子在同一个集合中,如何获取相关记录?

mongo系列mongo基本概念及操作

使用 Mongo 模板在 Spring Boot 中过滤内部 Arraylist 项的 Mongo 查询

如何使用 Mongo 存储库两次查询同一字段?