2014-04-29 1 views
0

나는 event이라는 컬렉션이 있습니다.집계 결과의 각 문서에있는 문서 배열을 정렬하는 방법은 무엇입니까?

나는 다음과 같이 집계 쿼리가

db.event.aggregate([ 
    { "$group": { 
     "_id":{ 
      "UserId":"$TracInfo.UserId", 
      "SessionId":"$TracInfo.SessionId" 
     }, 
     "EventName":{ "$push": { 
      "Name":"$Name", 
      "Time":"$Timestamp" 
     }} 
    }},      
    { "$out" :"demo" } 
]) 

다음과 같이 출력은 : 나는 시간 값에 대한 결과 각 문서의 EventName을 배열을 정렬 할

{ 
    "result":[ 
     { 
      "_id" : { 
       "UserId" : "pawan", 
       "SessionId" : "q69lIFHcpsCRgxtbJu1v" 
      }, 
      "EventName" : [ 
       { 
        "Name" : "PREMISES MAP DELETED", 
        "Time" : NumberLong("1336090020090") 
       }, 
       { 
        "Name" : "SCREEN STOPPED", 
        "Time" : NumberLong("1336090020010") 
       }, 
       { 
        "Name" : "SETTINGS CHANGED", 
        "Time" : NumberLong("1336090020030") 
       }, 
       { 
        "Name" : "PREMISES MAP DELETED", 
        "Time" : NumberLong("1336090020100") 
       }, 
       { 
        "Name" : "SCREEN STARTED", 
        "Time" : NumberLong("1336090020330") 
       }, 
       ... 
     }, 
      ... 
    ] 
} 

.

어떤 방법이 있습니까?

나는

{$sort:{"EventName.Time":1}} 

을 시도했지만 작동하지 않았다.

+1

종류의 그것은 그 성능 힌트에 대한 배열에 – Sikorski

답변

3

먼저 성능에 영향을주지 않으려면 시간 소인에 색인이 있어야합니다.

둘째,이 집계 사용

db.event.aggregate([ 
        { $sort: { Timestamp:1 } }, 
        { $group: 
        { _id:{"UserId":"$TracInfo.UserId","SessionId":"$TracInfo.SessionId"}, 
         EventName:{$push:{"Name":"$Name","Time":"$Timestamp"}}}},     
        {$out:"demo"} 
       ]) 
+0

감사를 밀어 전에 .. – Ninad

0

배열로 보내기 전에 타임 스탬프를 정렬하십시오.

관련 문제