我想要得到在过去10天内修改过的所有记录。在数据库中,我有一个列LastModifiedDate。在此基础上,我想用MongoDB编写过滤器查询。以下是集合所有者的格式:
[
{
"_id": ObjectId("5b0ca634806bebc3584d9dc2"),
"ownerKey": "WEST PIONEER LLC, ID",
"isCorporation": true,
"corpName": "WEST PIONEER LLC",
"propertyMailingAddress": {
"poBox": "",
"street": "250 S 5TH ST",
"house": "",
"apartment": "2",
"city": "BOISE",
"state": "ID",
"zip": "83702",
"type": "UNKNOWN",
"sources": [
"SNL"
]
},
"contacts": [],
"createDate": {
"year": 2018,
"month": 5,
"day": 28
},
"history": [],
"sources": [
"SNL"
],
"lastModifiedDate": "2018-05-29T01:00:36.533Z"
}
]
我正在使用以下查询查询数据:
db.collection.aggregate([
{
$project: {
date: {
$dateFromString: {
dateString: "$lastModifiedDate"
}
}
}
},
{
$match: {
date: {
$gte: new Date((new Date().getTime()-(10*24*60*60*1000)))
}
}
}
])
但这不是过滤查询。我找到了一个聚合查询的方法,相反,我想要一个可以在Mongo Compass中执行的过滤器查询。
发布于 2018-05-31 08:12:57
在上面提到的集合文档中,lastModifiedDate是一个字符串。需要先转换为ISODate对象,再进行减法运算。下面的查询应该可以工作。
db.owners.aggregate([{$project:{"_id":1,"cdate":{$dateFromString:{"dateString":"$lastModifiedDate"}}}},{$project:{"_id":1,diff_msecs:{$subtract:[new ISODate(),"$cdate"]}}},{$project:{"_id":1,diff_days:{$divide:["$diff_msecs",1000*60*60*24]}}},{$match:{"diff_days":{"$lte":10}}}])
初始投影将lastModifiedDate从字符串转换为IsoDate。第二个项目从当前日期减去,然后从毫秒转换为天,最后比较结果是否小于10。
https://stackoverflow.com/questions/50610829
复制相似问题