Mongodb:基于ISODate格式的时间查询。 我的查询有什么问题?

假设Mongodb数据库中的示例文档如下所示:

{ "date" : ISODate("2015-11-09T05:58:19.474Z") } { "date" : ISODate("2014-10-25T07:30:00.241Z") } { "date" : ISODate("2015-11-30T15:24:00.251Z") } { "date" : ISODate("2012-01-10T18:36:00.101Z") } 

预期:

  { "date" : ISODate("2015-11-09T05:58:19.474Z") } { "date" : ISODate("2014-10-25T07:30:00.241Z") } 

我试了下面的查询:

  collection.find({"$and": [{ "date" : { "$gt": [ {"$hour": "$date"}, 4] } }, {"date" :{ "$lt": [ {"$hour": "$date"}, 8] } } ]}); 

此查询不会产生任何结果。 在Mongodb中被接受的答案是:ISODate格式的查询是基于时间的 。 我错在哪里?

注意:我正在使用nodejs连接到mongodb

查询不会产生任何结果,因为$hour操作符只应用于聚合pipe道,而不是find()查询。 所以在你的聚合中,你的pipe道有两个步骤, $project创build一个新的字段,包含小时部分和下一个阶段$match ,然后查询文档。

因此,您的最终聚合操作将如下所示:

 var pipeline = [ { "$project": { "hour": { "$hour": "$date" }, "date": 1 } }, { "$match": { "hour": { "$gt": 4, "$lt": 8} } } ] db.collection.aggregate(pipeline);