2014-02-08 2 views
0

많은 통계 데이터를 수집하고 일부 값 (예 : 인기도)을 계산합니다. 그 후에 그래프로 표시해야합니다. 나는 을 읽고 내 작업은 매우 단순 해 보입니다. 매일 문서를 작성하고 기사에 설명 된대로 데이터를 저장하십시오. 지난 3 일 동안 가장 인기있는 값을 얻을 필요가있을 때 나는 단지 aggregation 프레임 워크를 사용할 것입니다. 매우 간단합니다 ....통계 데이터 스키마

그러나이 경우 지난 24 시간 동안 가장 인기있는 값을 어떻게 얻을 수 있습니까? 지난 2 일 동안 문서를 필터링 할 수 있습니다. = 지난 24 시간 ...

위에서 설명한 스키마를 사용하여 기간을 유연하게 조정할 수 있습니까?

추가 : 데이터 구조에 따라

는 하루 종일 정보를 저장하는 하나의 문서를 사용 : 나는 지난 주 (최대 7), GROUP BY에 대한 문서를 선택할 수있는 통합 프레임 워크를 사용

{ 
    _id: "20101010/site-1/apache_pb.gif", 
    metadata: { 
     date: ISODate("2000-10-10T00:00:00Z"), 
     site: "site-1", 
     page: "/apache_pb.gif" }, 
    daily: 5468426, 
    hourly: { 
     "0": 227850, 
     "1": 210231, 
     ... 
     "23": 20457 }, 
    minute: { 
     "0": 3612, 
     "1": 3241, 
     ... 
     "1439": 2819 } 
} 

metadata.sitedaily의 합계를 사이트별로 방문하십시오. 위에 제안 된 계획으로 지난 24 시간 동안 사이트를 통한 총 방문수를 계산할 수 있습니까?

은 (by hour 문서를 제작하는 간단한 방법이 있지만 싶어 때문에 성능 이유로 그렇게하지 않는다)

+0

코드 및 스키마 + 데이터 예제에 대한 질문을 좀 더 구체적으로 작성하십시오. 사람들이 긴 기사를 읽고 질문에 대답 할 것이라고 기대할 수는 없습니다. ;) –

+1

고정. 내 질문에 대한 답변을 충분히 이해하기 바란다. –

답변

0

당신은 여전히 ​​동일한 스키마를 유지할 수 있으며, 당신이해야 할 모든 쿼리를 변경하는 것입니다.

대신 dailysum을하고 당신은 프로젝트 결과에daily이 필요합니다. 이 경우 집계를 수행 할 필요가 없기 때문에 집계 프레임 워크를 사용할 필요조차 없으며 쿼리가 매우 간단 해집니다. 카운트 만 반환하는 새로운 쿼리의 예는 다음과 같습니다.

db.coll.find({date: {$gt: ISODate("2000-10-10T00:00:00Z"), 
        $lt: ISODate("2000-10-11T00:00:00Z")}}, 
      {"daily": 1, "_id": 0}); 
+0

현재 날짜의 총 방문수는 반환되지만, 지난 24 시간과 동일하지는 않습니다. 현재 시간이 '12:23 pm'이라고 가정합니다. 그래서 저는 지금까지 12:24 pm Yestarday부터 데이터를 수집해야합니다. –