日期范围查询 mongodb
Posted
技术标签:
【中文标题】日期范围查询 mongodb【英文标题】:Date range queries mongodb 【发布时间】:2015-07-17 03:41:06 【问题描述】:我有两个收藏,一个是random
,另一个是'msg'
在消息中我有一个类似
的文档 "message": "sssss", postedAt: Fri Jul 17 2015 09:03:43 GMT+0530 (IST)
对于随机收集,有一个脚本每分钟生成一次随机数
喜欢
"randomStr": "sss", postedAt: Fri Jul 17 2015 09:03:43 GMT+0530 (IST)
"randomStr": "xxx", postedAt: Fri Jul 17 2015 09:04:43 GMT+0530 (IST)
"randomStr": "yyy", postedAt: Fri Jul 17 2015 09:05:43 GMT+0530 (IST)
注意时间的变化,每分钟都有一个新记录。
现在,我的问题是
当我查询message
集合时,我会得到一条记录。
让我们这么说
"message": "sssss", postedAt: Fri Jul 17 2015 09:03:13 GMT+0530 (IST)
现在我想从random
集合中获取记录,该集合在准确的时间发布
此消息发布在09:03
,我想从random
集合中获取记录,该集合在同一时间发布09:03
。
如何做到这一点?任何帮助表示赞赏。谢谢。
注意:我在meteor中做这个
编辑
为第一条评论添加了图片
【问题讨论】:
不是这么简单吗?db.random.find("postedAt" : $date );
@gastonmancini,如果秒数不同,则无法正常工作,请添加图像作为有问题的证据。谢谢回复
【参考方案1】:
所以这里的重点是“实际使用一个范围”,并且还要注意你得到的 Date
值作为回报。所以原则上作为一个基本的例子。
现在执行此操作的时间是:
var date = new Date()
ISODate("2015-07-17T04:02:04.471Z")
因此,如果您假设文档中的实际时间戳“不精确到分钟”(如上),“随机记录”也不太可能如此,那么首先要做的是将其“四舍五入”到分钟:
date = new Date(date.valueOf() - date.valueOf() % ( 1000 * 60 ))
ISODate("2015-07-17T04:02:00Z")
当然,“结束日期”只是在那之后的一分钟:
var endDate = new Date(date.valueOf() + ( 1000 * 60 ))
ISODate("2015-07-17T04:03:00Z")
然后,当您查询“rqndom”时,您只会得到“范围”,使用$gte
和$lt
运算符:
db.random.find( "postedAt": "$gte": date, "$lt": endDate )
这只是在那一分钟内以任何可能的值从“随机”中检索您的单个“每分钟写入一次”项目。
所以基本上:
将您输入的检索日期四舍五入到分钟 搜索该值与下一分钟之间的“范围”【讨论】:
谢谢答案,我会试试这个,我有同样的想法,但认为如果我们更改日期值,我们可能会丢失日期对象引用,我们会丢失吗? @noName 取决于你做什么。您始终可以使用检索到的文档中源中的“四舍五入”值转换为新变量,如图所示。这可能是最安全的事情。您可以执行其他方法来操作检索到的日期值,但我没有在这里展示。以上是关于日期范围查询 mongodb的主要内容,如果未能解决你的问题,请参考以下文章