Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb Mongo Newbie:最新子哈希值在时间范围内的条目计数_Mongodb - Fatal编程技术网

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

Mongodb Mongo Newbie:最新子哈希值在时间范围内的条目计数,mongodb,Mongodb,我有一个mongo存储“task”,它有一个数组“answers”,它接受一个散列,其元素上有一个时间戳。因此: task -> project_id, answers -> [ { timestamp: <time>, question_1: <answer_1>, question_2: <answer_2> }, {

我有一个mongo存储“task”,它有一个数组“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>
       },
    ]
任务->
项目编号:,
答案->
[ 
{
时间戳:,
问题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()}})