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);