2017-05-09 56 views
0

我正在使用mongodb和restheart。RESTHeart過濾和按子文檔排序屬性

在我的NoSQL數據庫我有這個結構的獨特文件:

{ 
"_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 
              } 
              ] 
           } 
         ] 
       } 

我需要過濾與用戶ID = 11的用戶,我需要通過提升日期命令他的事件。

我試圖用:

http://myhost:port/myCollection?keys= { 「用戶」:{ 「$ elemMatch」:{ 「用戶ID」: 「11」}}} & sort_by = { 「users.elements.events.date」: -1}

但它不工作。

+0

能否請您檢查一次你的JSON,它很難理解它用戶id 11用戶ID 12或什麼的內部元件陣列是正確的結構? –

+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

是的,它適用於restheart,您需要定義一個聚合,請參閱文檔https://softinstigate.atlassian.net/wiki/x/AwDw –