mongodb - 蒙戈新手: Count of entries where the latest sub-hash has a value within a time range

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

感谢任何建议。

最佳答案

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

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

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

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

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

关于mongodb - 蒙戈新手: Count of entries where the latest sub-hash has a value within a time range,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13732798/

相关文章:

mongodb - 在 MongoRepository<Customer,String> 中使用限制和跳过

linux - 多行复制粘贴到 mongo shell

mongodb - 按集合中 bool 值的计数分组

javascript - Mongoose 保存空数组

mongodb - 如果不存在,则将字段添加到 Mongo 中的文档中

c# - MongoDB慢写导致socket超时异常

子文档键上的 MongoDB 索引

node.js - 在开发中设置从 Angular 向 NodeJS 发送 API 请求的服务器端口

java - Java 中的 MongoDB 聚合查询

javascript - 如何在 MongoDB (Mongoose) 中更新和更新插入文档。 NodeJS