2013-07-02 3 views
2

현재 작업중 인 프로젝트에 관한 mongo 문제가 있습니다. 내가 샘플로 내 사용자 로그 데이터를 저장해야mongodb 콜렉션의 날짜순 그룹화

: 아래

내 문제입니다

db.visitors 수집

[ 
    { 
     uid: "0001", 
     logPath: "/home", 
     logTime: "Mon Dec 27 2010 18:51:22 GMT+0000 (UTC)" 
    }, 
    { 
     uid: "0002", 
     logPath: "/", 
     logTime: "Mon Dec 27 2010 18:51:22 GMT+0000 (UTC)" 
    }, 
    { 
     uid: "0001", 
     logPath: "/product", 
     logTime: "Mon Dec 27 2010 18:51:23 GMT+0000 (UTC)" 
    }, 
    { 
     uid: "0001", 
     logPath: "/order", 
     logTime: "Mon Dec 28 2010 18:51:23 GMT+0000 (UTC)" 
    } 
] 

그리고 (날짜별로 그룹 내 방문 사용자가 필요 2010 년 12 월 28 일과 12 월 27 일 월요일 사이)

uid가 0001이고 그룹이

인 사용자의 로그를 찾으십시오. 6,
[ 
    { 
     date: "Mon Dec 28", 
     log: [ 
      { 
       logPath: '/order' 
      } 
     ] 
    }, 
    { 
     date: "Mon Dec 27", 
     log: [ 
      { 
       logPath: '/home' 
      }, 
      { 
       logPath: '/product' 
      } 
     ] 
    } 
] 

트릭을해야 그런 식으로

+0

날짜가 실제로 문자열입니까? – Sammaye

+0

Date 객체의 모든 날짜 –

답변

1
db.aggregate([ 
    {$match: {uid: "0001", logTime: {$gte: ISODate('Mon Dec 27 2010'), $lt: ISODate("Mon Dec 29 2010")}}}, 
    {$project: 
     {day: {'$dayOfMonth': '$logTime'},month: {'$month':'$logTime'},year: {'$year':'$logTime'} } 
    }, 
    {$group: { 
     _id: {day:'$day',month:'$month',year:'$year'}, 
     log: {$push:{logPath:'$logPath'}} 
    }} 
]) 

뭔가 나에게 그룹을 어떻게 나를 인도 해주십시오. 단 한 달 단위로 그룹화하려는 경우 $group_id에서 day 필드를 가져올 수 있습니다.

날짜를 지정하는 또 다른 방법이 있지만이 방법이 현재로서는 가장 쉬운 방법임을 인정해야합니다.

+0

원한다면'{$ dayOfMonth : ...}'연산자와 같은 것들이'{$ group : 내부}에서 작동하기 때문에'{$ project : ..}'단계를 생략 할 수 있습니다. ...}'. –

+0

@ Conrad.Dean 실제로, 나는 (개인적으로) 완전히 열심히 – Sammaye

+0

을 읽는 것이 다소 어렵다고 생각하지만. 이봐,'{$ match : ..}'에서 그것들을 사용할 수 있는지 알고 있니? 나는'ISODate()'로 필터링하는 것을 피하고 싶었습니다. –

관련 문제