3

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

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 查询语法。

任何建议表示赞赏。

4

2 回答 2

3

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

通常使用聚合框架(可以轻松做到这一点)或普通查询会更好。

现在,即使您想知道最新的项目答案是否在 24 小时内,假设应该包括 24 小时内的任何项目答案可能是一个不错的选择,因为这很可能意味着最新的答案(如果不是那么为什么不?)。所以这可以通过(再次如@shelman所说)来实现:

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

这将在过去 24 小时内找到任何有答案的项目。然后,您可以过滤掉第一个/最后一个答案(应该始终是您要寻找的答案),然后bam,您的结果将获得更高的性能,内嵌到您的应用程序中

于 2012-12-06T08:43:11.973 回答
1

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

于 2012-12-05T22:39:39.260 回答