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