Mongo 新手:最新子哈希在某个时间范围内具有值的条目计数



我有一个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 查询语法。

任何建议表示赞赏。

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

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

现在,即使您想知道最新的项目答案是否在 24 小时内,

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

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

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

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

最新更新