2017-05-09 13 views
0

저는 mongodb 및 restheart와 협력하고 있습니다. 내 형 NoSQL DB에 RESTHeart 필터링 및 하위 문서 정렬 속성

내가이 구조의 고유 한 문서가 있습니다

{ 
"_id": "docID", 
"users": [ 
      { 
      "userID": "12",     
      "elements": [ 
          { 
          "elementID": "1492446877599", 
          "events": [ 
             { 
              "id": 1, 
              "date": 356 
             }, 
             {          
              "id": 2, 
              "date": 123 
              } 
             ] 
          } 
         ] 
       }, 
       { 
       "userID": "11",     
       "elements": [ 
           { 
           "elementID": "14924", 
           "events": [ 
              { 
              "id": 1, 
              "date": 123 
              }, 
              {          
              "id": 2, 
              "date": 356 
              } 
              ] 
           }, 
           { 
           "elementID": "14925", 
           "events": [ 
              { 
              "id": 1, 
              "date": 12 
              }, 
              {          
              "id": 2, 
              "date": 36 
              } 
              ] 
           } 
         ] 
       } 

내가 아이디 = 11 사용자를 필터링해야하고 내가 날짜를 오름차순으로 자신의 이벤트를 주문해야합니다.

내가 함께하려고했던 : { "사용자": { "$ elemMatch": { "사용자 ID": "11"}}}

http://myhost:port/myCollection?keys= & sort_by = { "users.elements.events.date" -1}

하지만 작동하지 않습니다.

+0

당신이 한 번 JSON을 확인하시기 바랍니다 수, 그 어려운이 사용자 ID 12 또는 무엇의 내부 요소 배열이 올바른 구조가 11입니다 용자 ID 이해하기? –

+0

좋습니다, 고맙습니다. 지금 확인하십시오 – Alex

답변

0
db.v.aggregate([ 
    { $unwind : '$users'}, 
    { $match : { 'users.userID' : '11' }} , 
    { $unwind : '$users.elements'}, 
    { $unwind : '$users.elements.events'}, 
    { $sort : {'users.elements.events.date': 1}}, 
    { $group : { 
     _id : '$_id', 
     elementID : { $first : '$users.elements.elementID' }, 
     userID : { $first : '$users.userID' }, 
     events : { $push : '$users.elements.events'} 
     } 
    }, 
    { $project : { 
     _id : 1, 
     userID : 1, 
     'elements.elementID' : '$elementID', 
     'elements.events' : '$events' 
     } 
    } 

]); 

이 다음 당신에게 줄 것이다 :

{ 
    "_id" : ObjectId("5911ba55f0d9c285c561ea33"), 
    "userID" : "11", 
    "elements" : { 
     "elementID" : "14924", 
     "events" : [ 
      { 
       "id" : 1, 
       "date" : 123 
      }, 
      { 
       "id" : 2, 
       "date" : 356 
      } 
     ] 
    } 
} 
+0

RESTHeart에서 작동합니까? – Alex

+0

네, 안심할 수 있습니다. 집계를 정의해야합니다. 문서의 내용은 https://softinstigate.atlassian.net/wiki/x/AwDw에서 확인할 수 있습니다. –