MongoDB查询按日期

时间:2018-02-06 22:52:15

标签: mongodb date datetime

我在数据库中有文件,其日期时间值如下:

{
    "_id" : ObjectId("5a66fa22d29dbd0001521023"),
    "exportSuccessful" : true,
    "month" : 0,
    "week" : 4,
    "weekDay" : "Mon",
    "dateTime" : ISODate("2018-01-22T09:02:26.525Z"),
    "__v" : 0
}

我想:

  1. 查询数据库中的给定日期,如果日期匹配,则返回包含dateTime的文档(我不关心时间)。这主要是为了在插入此日期之前已经存在的文档之前进行测试。在上面的示例中,如果我的指定日期为2018-01-22,我希望返回的文档。

  2. 从数据库中检索具有不同日期的所有文档(同样,我不关心时间部分)。如果有两个文件具有相同的日期(但不同的时间),则只返回第一个。

  3. 根据我的理解,Mongo的ISODate类型不允许我只存储日期,它总是必须是dateTime值。在我这边,我无法控制数据库中的内容。

1 个答案:

答案 0 :(得分:1)

尝试范围查询,包括从当天开始到结束日期时间到当天结束的开始日期时间。所以基本上每天创建日期。

这样的东西
var start = moment().utc().startOf('day');
var end = moment().utc().endOf('day');

db.collection.find({
    dateTime: {
        $gte: start,
        $lte: end
    }
})

获取所有不同的日期文件:

db.collection.aggregate(
 {"$group":{
  "_id":{
    "$dateToString":{"format":"%Y-%m-%d","date":"$dateTime"}
  },
  "first":{
    "$first":"$$ROOT"
  }
}}])