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

Posted

技术标签:

【中文标题】Mongodb:基于 ISODate 格式的时间查询。我的查询有啥问题?【英文标题】:Mongodb : Query based on time in ISODate format. What's wrong in my query?Mongodb:基于 ISODate 格式的时间查询。我的查询有什么问题? 【发布时间】:2016-02-13 11:30:38 【问题描述】:

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

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

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

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

db.collection.aggregate(pipeline);

【讨论】:

以上是关于Mongodb:基于 ISODate 格式的时间查询。我的查询有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 mongodb php 中以 ISODATE 格式存储当前日期和时间?

mongodb isodate怎么查询

将 MongoDB 字段从字符串转换为数组中的 ISODate

mongodb对数组元素及内嵌文档进行增删改查操作(转)

mongoDB对时间的处理ISODate与我们时区相差8小时

golang解析mongodb中的ISODate类型