日期范围查询mongodb

时间:2015-07-17 03:41:07

标签: mongodb meteor mongodb-query

我有两个集合,一个是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中这样做

修改

为第一条评论添加了图片 enter image description here

1 个答案:

答案 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 } })

这只是检索你的单身"每分钟写一次"项目来自"随机"在那一分钟内任何可能的价值。

基本上是这样的:

  • 将输入检索日期舍入到分钟
  • 搜索"范围"在那个值和下一分钟之间