java - 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"]}}}
]);
现在,我们将使用这些字段来过滤记录$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}}
]);
推荐阅读
- pandas - 当我已经拥有所有信息时,如何使用 matplotlib 制作箱线图?
- android - Android Jetpack Compose CircularProgressIndicator 设置最小和最大进度
- delphi - Delphi 10.4中的下拉字段列表问题
- php - PHP:在printer_write($handle,$string)中打印阿拉伯字符时出现问题;
- java - 在百里香模板中迭代 json 键值对时出现错误
- terminal - 如何通过终端设置显示旋转?
- python - 当绘制半对数 x 轴时,我得到一个双十年:如何强制显示每个十年?
- distributed-computing - 如果我向 CockroachDB 集群添加一个新节点,其存储空间比现有节点多,会发生什么情况?
- google-cloud-platform - 如何使用虚拟机获取虚拟机的外部 IP
- azure-active-directory - 用户预配时 Microsoft SCIM 身份验证错误 Azure 中的错误