在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中的两个字符串日期范围之间查找

mongodb

mongo和mongod的区别

如何使用 @Query 在日期 Spring 数据 MongoDB 之间进行选择

linux安装mongodb数据库./mongod -f mongodb.conf失败或者error

node中mongodb数据库的使用(下载使用mongoose包)及mongodb数据库的常用命令