我有两个集合,一个是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
完全同时发布的记录。
怎么做?任何帮助赞赏。 THX。
注意:我在meteor中这样做
修改
为第一条评论添加了图片
答案 0 :(得分:1)
所以这里的重点是实际使用范围'并且还要注意您获得的Date
值。原则上作为一个基本的例子。
现在执行此操作的时间是:
var date = new Date()
ISODate("2015-07-17T04:02:04.471Z")
因此,如果您认为文档中的实际时间戳是"不完全是分钟" (如上所述)也不可能是"随机记录"那么首先要做的是" round"它到了分钟:
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 } })
这只是检索你的单身"每分钟写一次"项目来自"随机"在那一分钟内任何可能的价值。
基本上是这样的: