2012-10-12 4 views
2

에서 매일 매일 카운트 내가 "사용자"컬렉션이와 나는 하루 전체 사용자에 의해 일을 할 수가 예 :검색어가 MongoDB를

01.01.2012 -> 5 
02.01.2012 -> 9 
03.01.2012 -> 18 
04.01.2012 -> 24 
05.01.2012 -> 38 
06.01.2012 -> 48 

나는 각 사용자에 대한 createdAt의 attritube 있습니다. 쿼리에 대한 도움을받을 수 있습니까?

{ 
    "_id" : ObjectId("5076d3e70546c971539d9f8a"), 
    "createdAt" : Date(1339964775466), 
    "points" : 200, 
    "profile" : null, 
    "userId" : "10002" 
} 

답변

3

당신은 성능을 위해, 몇 가지 옵션을 사용할 수 있습니다

  1. 은 별도의 통합 문서의 수를 유지합니다. 사용자를 추가 할 때마다 그 날의 카운터를 업데이트합니다 (예를 들어, 매일 고유 한 카운터 문서가 users.daycounters 컬렉션에 있음). 이것은 가장 빠른 접근 방법이며 쉽게 확장 할 수 있습니다.
  2. 2.2 이상에서는 집계 프레임 워크를 사용할 수 있습니다. 유스 케이스와 가까운 예제가 여기에 설명되어 있습니다. $ 그룹 운영자를 찾으십시오 : http://docs.mongodb.org/manual/applications/aggregation/
  3. map/reduce 프레임 워크를 사용할 수 있습니다 : http://www.mongodb.org/display/DOCS/MapReduce. 이것은 sharding 호환이지만 JavaScript 컨텍스트 사용으로 인해 상대적으로 느립니다. 또한 이처럼 단순한 것은 그리 간단하지 않습니다.
  4. http://www.mongodb.org/display/DOCS/Aggregation#Aggregation-Group에 문서화 된 group() 연산자를 사용할 수 있습니다. 이것은 sharded 환경에서는 작동하지 않으며 일반적으로 단일 스레드 JavaScript 컨텍스트의 사용으로 인해 속도가 느리기 때문에 권장하지 않습니다.
0

여기이 하루 카운트 데이터에 의해 작품, 날

출력 내가 가지고 :

30/3/2016 4 
26/3/2016 4 
21/3/2016 4 
12/3/2016 12 
14/3/2016 18 
10/3/2016 10 
9/3/2016 11 
8/3/2016 19 
7/3/2016 21 

스크립트

model.aggregate({ 
    $match: { 
    createdAt: { 
     $gte: new Date("2016-01-01") 
    } 
    } 
}, { 
    $group: { 
    _id: { 
     "year": { "$year": "$createdAt" }, 
     "month": { "$month": "$createdAt" }, 
     "day": { "$dayOfMonth": "$createdAt" } 
    }, 
    count:{$sum: 1} 
    } 
}).exec(function(err,data){ 
    if (err) { 
    console.log('Error Fetching model'); 
    console.log(err); 
    } else { 
    console.log(data); 
    } 
});