在mongodb中查找日期之间的数据?
Posted
技术标签:
【中文标题】在mongodb中查找日期之间的数据?【英文标题】:Find data between dates in mongodb? 【发布时间】:2018-11-09 16:07:16 【问题描述】:我想获取最近 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 中执行的过滤器查询。
【问题讨论】:
【参考方案1】:在上面提到的集合文件中 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。
【讨论】:
感谢您的详细解释。你能分享一个可以在 MongoDB Comapss 中执行的查询版本吗?以上是关于在mongodb中查找日期之间的数据?的主要内容,如果未能解决你的问题,请参考以下文章
在spring mongodb中的两个字符串日期范围之间查找
如何使用 @Query 在日期 Spring 数据 MongoDB 之间进行选择