我似乎不能得到甚至是最基本的日期查询工作在MongoDB。使用类似这样的文档:

{
    "_id" : "foobar/201310",
    "ap" : "foobar",
    "dt" : ISODate("2013-10-01T00:00:00.000Z"),
    "tl" : 375439
}

查询如下所示:

{ 
    "dt" : { 
        "$gte" : { 
            "$date" : "2013-10-01T00:00:00.000Z"
        }
    }
}

执行得到0个结果:

db.mycollection.find({
  "dt" : { "$gte" : { "$date" : "2013-10-01T00:00:00.000Z"}}
})

知道为什么不行吗?

作为参考,这个查询是由Spring的MongoTemplate生成的,所以我不能直接控制最终发送到MongoDB的查询。

(注:)

> db.version()
2.4.7

谢谢!


当前回答

当我在搜索小于或等于现在的值时,这个方法很管用:

db.collectionName.find({ "dt": { "$lte" : new Date() + "" } });

其他回答

当我在搜索小于或等于现在的值时,这个方法很管用:

db.collectionName.find({ "dt": { "$lte" : new Date() + "" } });

试试这个:

{ "dt" : { "$gte" : ISODate("2013-10-01") } }

老问题,但仍然是第一个谷歌击中,所以我张贴在这里,所以我发现它再次更容易…

使用Mongo 4.2和一个aggregate():

db.collection.aggregate(
    [
     { $match: { "end_time": { "$gt": ISODate("2020-01-01T00:00:00.000Z")  } } },
     { $project: {
          "end_day": { $dateFromParts: { 'year' : {$year:"$end_time"}, 'month' : {$month:"$end_time"}, 'day': {$dayOfMonth:"$end_time"}, 'hour' : 0  } }
     }}, 
     {$group:{
        _id:   "$end_day",
        "count":{$sum:1},
    }}
   ]
)

这个函数将groupby变量作为日期,有时更好的方法是将其作为组件本身。

这是我的文档

"_id" : ObjectId("590173023c488e9a48e903d6"),
    "updatedAt" : ISODate("2017-04-27T04:26:42.709Z"),
    "createdAt" : ISODate("2017-04-27T04:26:42.709Z"),
    "flightId" : "590170f97cb84116075e2680",

 "_id" : ObjectId("590173023c488e9a48e903d6"),
        "updatedAt" : ISODate("2017-04-28T03:26:42.609Z"),
        "createdAt" : ISODate("2017-04-28T03:26:42.609Z"),
        "flightId" : "590170f97cb84116075e2680",

现在我想找到每一个27号日期的文档。所以我用了这个....

 > db.users.find({createdAt:{"$gte":ISODate("2017-04-27T00:00:00Z"),"$lt":ISODate("2017-04-28T00:00:00Z") }}).count()

result:1

这对我很管用。

来自MongoDB烹饪书页面的评论:

"dt" : 
{
    "$gte" : ISODate("2014-07-02T00:00:00Z"), 
    "$lt" : ISODate("2014-07-03T00:00:00Z") 
}

这对我很管用。在完整的上下文中,以下命令获取dt date字段的日期为2013-10-01 (YYYY-MM-DD) Zulu的每条记录:

db.mycollection.find({ "dt" : { "$gte" : ISODate("2013-10-01T00:00:00Z"), "$lt" : ISODate("2013-10-02T00:00:00Z") }})