2013-08-14 6 views
1

나는 다음과 같은 문서 구조 ...MongoDB를 집계 프레임 워크 그룹 및 종류

{ 
    "id":"documentID" 
    "sessionId":"sometext" 
    "msg":"sometext" 
    "time":"date" 
} 
    sessionId가 많은 문서

내가 sessionId하여 문서를 집계 할 존재할 수

  • 결과가 각 세션에는 시간별로 정렬 된 세션과 관련된 메시지 세트가 들어 있어야합니다.

    MongoDB 집계 프레임 워크를 사용하면 어떻게 할 수 있습니까?

    나는 정렬 시도 먼저 다음 그룹하지만 각 세션의 메시지가 어떤 이유로 분류되지 않은 :

    { $sort: { "time": 1 } }, 
    { "$group" : { 
        "_id" : "$sessionId", 
        "msgs" : { "$addToSet" : "$msg" } 
    } } 
    

    어떤 제안? 당신의 대답은 높게 평가됩니다. 세션 ID로 다음 그룹을 시간을 기준으로 컬렉션을

    db.collection.aggregate( 
        {$sort:{"time":1}}, 
        { $group: 
         { _id: "$sessionId", 
         messages: { "$push": {message: "$msg", time: "$time"} } 
         } 
        } 
    ) 
    

    이 정렬합니다 :

  • +1

    $ addToSet이 정렬되어 있지 않으므로 $ push를 사용하십시오 – Sammaye

    +0

    감사합니다 .. 그리고 각 메시지와 함께 시간을 얻고 싶습니까? –

    답변

    6

    당신은이 작업을 수행 할 수 있습니다. 각 세션 ID 그룹에는 메시지 및 메시지 시간을 포함하는 하위 문서 배열이 있습니다. 정렬을하면 메시지를 푸시하면 메시지 배열에서 시간 순서대로 정렬됩니다.