복붙노트

[MONGODB] 시간에 의해 MongoDB의 그룹

MONGODB

시간에 의해 MongoDB의 그룹

내가 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년 4월 25일 그리니치 표준시 11시 45분 14초 (열 created_at) 지금은 시간 그룹 열 created_at이 필요합니다. 나는 결과를 가지고 싶다 :

시간 | 시간에 트윗을 계산

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 );

그러나 시간에 의해 그룹 내 수 없습니다.

그것을 어떻게?

해결법

  1. ==============================

    1.당신이 그룹은 몽고 콘솔에 직접 통합 프레임 워크를 사용하는 방법 나는 당신을 말할 수

    당신이 그룹은 몽고 콘솔에 직접 통합 프레임 워크를 사용하는 방법 나는 당신을 말할 수

    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"}
       }
     })
    

    http://docs.mongodb.org/manual/reference/operator/aggregation-date/ : 추가 옵션을 보려면 여기 볼 수

    당신은 또한 당신이 사용하고있는 중 프로그래밍 언어에서 통합 프레임 워크를 사용하는 적절한 방법을 찾아야합니다.

  2. ==============================

    2.그룹화 _id를 정의 할 때 연산자 함수는 단지 $ 조별 리그에 직접 적용 할 수있는 날짜로 여기에 $ 프로젝트 단계를 사용할 필요가 없어야합니다. 이 결과를 얻기 위해 전체 컬렉션을 처리 할 필요가 저장합니다 :

    그룹화 _id를 정의 할 때 연산자 함수는 단지 $ 조별 리그에 직접 적용 할 수있는 날짜로 여기에 $ 프로젝트 단계를 사용할 필요가 없어야합니다. 이 결과를 얻기 위해 전체 컬렉션을 처리 할 필요가 저장합니다 :

    0의 결과로 문제가되는 존재하지 않는 필드를 정의했다 : 또한 당신은 그래서 단순히 {1 "$ 합계를"} 계산된다.

        $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 ),
                ),
            )
        ));
    

    어떤 경우, 날짜를 필터링하기 위해 파이프 라인의 시작에 $ 일치하는 단계를 추가합니다. 어느 날 출력 허용의 경우, 당신은 단지 그룹화에 $ 시간을 정의 할 필요가 당신은 빠른 수단 작업 집합 크기를 줄일 수 있습니다. 그리고 아마 당신은 어쨌든 수행 할 작업.

  3. from https://stackoverflow.com/questions/23293082/mongodb-group-by-hour by cc-by-sa and MIT license