【问题标题】:Mongo DB Date Difference and and query condtion in same query in Java Mongo TemplateJava Mongo模板中同一查询中的Mongodb日期差异和查询条件
【发布时间】:2020-05-23 08:24:00
【问题描述】:

大家好,我想进行如下查询

更新日期超过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 模板聚合过滤器中进行此查询

【问题讨论】:

  • 您能否在问题中添加示例文档数据,以及您期望的输出
  • @PuneetSingh 感谢您的回复,现在我更新了正确的信息,请帮我解决这个问题。

标签: java mongodb spring-data aggregation-framework


【解决方案1】:

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

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

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

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

现在,我们可以使用 $project 删除额外添加的字段

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

【讨论】:

    猜你喜欢
    • 2016-05-21
    • 2016-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多