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

时间:2015-11-12 07:39:16

标签: mysql node.js mongodb date

假设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

1 个答案:

答案 0 :(得分:1)

查询没有产生任何结果,因为$hour运算符仅应用于聚合管道,而不是find()查询。因此,在您的聚合中,您的管道有两个步骤,$project创建一个包含小时部分的新字段,然后是$match,然后查询文档。

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

var pipeline = [
    {
        "$project": {
            "hour": { "$hour": "$date" },
            "date": 1
        }
    },
    {
        "$match": {
            "hour": { "$gt": 4,  "$lt": 8}
        }
    }
]

db.collection.aggregate(pipeline);