假设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 : Query based on time in ISODate format 中接受的答案在哪里做。我哪里错了?
注意:我是用nodejs连接mongodb
最佳答案
查询没有产生任何结果,因为 $hour
运算符仅适用于聚合管道,不适用于 find()
查询。因此,在您的聚合中,您的管道有两个步骤,$project
这将创建一个新字段,其中包含小时部分和下一阶段 $match
然后查询文档。
因此您最终的聚合操作将是这样的:
var pipeline = [
{
"$project": {
"hour": { "$hour": "$date" },
"date": 1
}
},
{
"$match": {
"hour": { "$gt": 4, "$lt": 8}
}
}
]
db.collection.aggregate(pipeline);
关于mysql - Mongodb : Query based on time in ISODate format. 我的查询有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33666398/