2013-07-15 1 views
0

나는 이것을 간단하게하려고 노력할 것이다. 나는 사용자 개체를 가지고 있는데, 내 사용자 개체 안에는 사용자가 로그인 한 날짜의 ISODates 만있는 배열 필드가 있습니다. 존재하는 모든 날짜에 대해 특정 날짜에 로그인 한 사용자 수를 계산하고 싶습니다 .MongoDB Aggregate Framework로 사용자 활동 계산하기

샘플 사용자 :

{ 
    "date": ISODate, 
    "number_of_users_logged_in": 10 
} 

이게 가능 : 나는 나에게 뭔가를 알려주는 출력을하고 싶습니다

{ 
    "_id": "some_id", 
    "name": "bob", 
    "logins": [isodate, isodate, isodate...], 

    //... 
} 

? 그 일을 내가 어떻게 할까?

답변

1

당신은 다음과 같이하고, $project 날짜 만 (원하는 단위를 사용) 날짜 다음, 배열 $group 폭발 $unwind 작업을 사용하고 계산해야합니다

db.user.aggregate({ 
    $unwind: "$logins" 
}, 
{ 
    $group: { 
     _id: { 
      year: { 
       $year: "$logins" 
      }, 
      month: { 
       $month: "$logins" 
      }, 
      day: { 
       $dayOfMonth: "$logins" 
      }, 
      hour: { 
       $hour: "$logins" 
      } 
     }, 
     date: { 
      $first: "$logins" 
     }, 
     count: { 
      $sum: 1 
     } 
    } 
}, 
{ 
    $project: { 
     _id : 0, 
     date: "$date", 
     number_of_users_logged_in: "$count" 
    } 
}) 

나는별로 그룹화 년/월/하루/시간.

+0

Perfect! 고맙습니다! – user602525