Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.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
Javascript 按小时划分的MongoDB组_Javascript_Php_Mongodb_Aggregation Framework - Fatal编程技术网

Javascript 按小时划分的MongoDB组

Javascript 按小时划分的MongoDB组,javascript,php,mongodb,aggregation-framework,Javascript,Php,Mongodb,Aggregation Framework,我将推文保存到mongo DB: twit.stream('statuses/filter', {'track': ['animal']}, function(stream) { stream.on('data', function(data) { console.log(util.inspect(data)); data.created_at = new Date(data.created_at); collectionAnimal.

我将推文保存到mongo DB:

 twit.stream('statuses/filter', {'track': ['animal']}, function(stream) {
    stream.on('data', function(data) {
        console.log(util.inspect(data));

        data.created_at = new Date(data.created_at);
        collectionAnimal.insert(data, function(err, docs) {});
    });
});
没关系

MongoDB中的推特时间格式为:2014-04-25 11:45:14 GMT(列创建时间) 现在我需要在小时内创建组列。我想知道结果:

小时数|按小时计算推文数


1 | 28

2 | 26

3 | 32

4 | 42

5 | 36

我失败的尝试:

    $keys = array('created_at' => true);
    $initial = array('count' => 0);
    $reduce = "function(doc, prev) { prev.count += 1 }";

    $tweetsGroup = $this->collectionAnimal->group( $keys, $initial, $reduce );
但是我的朋友不能按小时分组


如何做到这一点?

我可以告诉您如何直接在mongo控制台上使用聚合框架进行分组

db.tweets.aggregate(
 { "$project": {
      "y":{"$year":"$created_at"},
      "m":{"$month":"$created_at"},
      "d":{"$dayOfMonth":"$created_at"},
      "h":{"$hour":"$created_at"},
      "tweet":1 }
 },
 { "$group":{ 
       "_id": { "year":"$y","month":"$m","day":"$d","hour":"$h"},
       "total":{ "$sum": "$tweet"}
   }
 })
有关更多选项,请参见此处:


您还需要从正在使用的任何编程语言中找到使用聚合框架的适当方法。

这里不需要使用stage,因为在定义分组
\u id
时,可以直接在stage中使用函数。这样就不必为了获得结果而处理整个集合:

另外,您只是在计算,因此简单地
{“$sum”:1}
,在其中定义一个不存在的字段是导致0的问题

    $this->collection->aggregate(array(
        array(
            '$group' => array(
                "_id" => array( 
                    "y" => array( '$year' => '$created_at' ),
                    "m" => array( '$month' => '$created_at' ),
                    "d" => array( '$dayOfMonth' => '$created_at' ),
                    "h" => array( '$hour' => '$created_at' ),
                ),
                "total" => array( '$sum' => 1 ),
            ),
        )
    ));

如果有的话,在管道的开头添加一个阶段以过滤日期。如果一天的输出是可接受的,那么您只需要在分组中定义
$hour
,并且您正在减少工作集大小,这意味着更快。也许你想做什么。

Lalit的回答对我不起作用,它总是给我零。 相反,我做到了:

db.tweets.aggregate(
 { "$project": {
      "y":{"$year":"$created_at"},
      "m":{"$month":"$created_at"},
      "d":{"$dayOfMonth":"$created_at"},
      "h":{"$hour":"$created_at"},
      "tweet":1 }
 },
 { "$group":{ 
       "_id": { "year":"$y","month":"$m","day":"$d","hour":"$h"},
       'count':{$sum:1} 
   }
 })
'count':{$sum:1}
是唯一的区别


可能会帮助像我这样的mongo新手。

您能给我们看一下您的示例文档吗?