Mongo Newbie:最新子哈希值在一个时间范围内的条目数

时间:2012-12-05 21:28:57

标签: mongodb

我有一个mongo商店“任务”,它有一个数组“answers”,它接受一个哈希,其元素是一个时间戳。所以:

task ->
  project_id,
  answers ->
    [ 
       {
         timestamp: <time>,
         question_1: <answer_1>,
         question_2: <answer_2>
       },
       {
         timestamp: <time>,
         question_1: <answer_1>,
         question_2: <answer_2>
       },
    ]

我想要做的是获取具有给定项目ID的所有任务的列表,其最新答案时间戳字段在过去24小时内。项目ID显然非常简单,我可以确定时间戳是否介于$ gte和$ lt ...的给定时间段之间但我不知道如何将其范围限定为最新的时间戳。

我没有使用ORM - 所以只需要简单的mongo查询语法。

任何建议表示赞赏。

2 个答案:

答案 0 :(得分:3)

正如@shelman提到的Map Reduce不是必需的,我不认为这是最好的方法。请注意,MR并非真正设计为内联到您自己的应用程序,并且速度很慢(根据定义)。

使用聚合框架(可以很容易地做到这一点)或者更好的普通查询通常会更好。

现在,即使你想知道最新的项目答案是否在24小时内,也可以认为应该包括24小时内的任何项目答案,因为这很可能意味着最新的(如果不是那么为什么不呢?)。所以这可以实现(再次像@shelman所说):

find({project_id: 5, "answers.timestamp": {$gte: ISODate(), $lt: ISODate()}})

这将在过去24小时内找到任何有答案的项目。你cna然后过滤掉第一个/最后一个答案(应该总是你想要的答案)和bam,你的结果更高效,内联你的应用程序,方式

答案 1 :(得分:1)

我可能会误解您尝试使用的确切查询,但我不确定为什么您需要map reduce。 24小时前正确project_id和时间戳$gt的复合查询是否有效?