Mongodb Mongo Newbie:最新子哈希值在时间范围内的条目计数
我有一个mongo存储“task”,它有一个数组“answers”,它接受一个散列,其元素上有一个时间戳。因此:Mongodb Mongo Newbie:最新子哈希值在时间范围内的条目计数,mongodb,Mongodb,我有一个mongo存储“task”,它有一个数组“answers”,它接受一个散列,其元素上有一个时间戳。因此: task -> project_id, answers -> [ { timestamp: <time>, question_1: <answer_1>, question_2: <answer_2> }, {
task ->
project_id,
answers ->
[
{
timestamp: <time>,
question_1: <answer_1>,
question_2: <answer_2>
},
{
timestamp: <time>,
question_1: <answer_1>,
question_2: <answer_2>
},
]
任务->
项目编号:,
答案->
[
{
时间戳:,
问题1:,
问题2:
},
{
时间戳:,
问题1:,
问题2:
},
]
我想做的是获得一个列表,其中列出了所有具有给定项目ID的任务,并且其最新答案时间戳字段位于过去24小时内。项目ID的事情显然非常简单,我可以确定时间戳是否在给定的$gte和$lt之间……但我不知道如何将其范围限定为最新的时间戳
我没有为此使用ORM,所以最好使用简单的mongo查询语法
非常感谢您的建议。我可能误解了您试图使用的确切查询,但我不确定您为什么需要map reduce。对于正确的<代码> >项目> ID /代码>和24小时前的工作时间戳<代码> $gt <代码>,是否不需要复合查询? map减少,作为@谢尔曼,不需要提及,我不认为这是最好的方法。请注意,MR并不是真正设计为内联运行到您自己的应用程序,而且速度很慢(根据定义) 通常,使用聚合框架(可以很容易地做到这一点)或普通查询会更好 现在,尽管您想知道最新的项目答案是否在24小时内,但最好假设任何在24小时内的项目答案都应该包括在内,因为这很可能意味着最新的答案(如果不是,那么为什么不是?)。因此,这可以通过以下方式实现(同样如@shelman所说):
这将在过去24小时内找到任何有答案的项目。然后过滤掉第一个/最后一个答案(应该始终是您要查找的答案),然后bam,您的结果将以更高的性能、与应用程序内联的方式出现您需要执行map reduce命令才能恢复此结果;你同意吗?我可以提供它可能看起来像什么的细节。谢谢Petrogad。快速查看map reduce,它似乎是必要的选项。如果你能尝试一些细节,我们将不胜感激。只要你在Mongo v2.1或更高版本,该软件就会处理得很好。当我说“项目我当然会”时,我不知道为什么我一直在说“项目”。
find({project_id: 5, "answers.timestamp": {$gte: ISODate(), $lt: ISODate()}})