2017-05-09 6 views
0

私はmongodbとrestheartで作業しています。RESTHeartサブ文書によるフィルタリングと並べ替えプロパティ

私はこのような構造を持つユニークな文書持つ私のNoSQL DBに

{ 
"_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ユーザーIDを持つユーザーをフィルタ処理する必要があると私は日付の昇順によって彼のイベントを注文する必要があります。

私がしようとしていた:{ "ユーザー":{ "$ elemMatch":{ "ユーザーID": "11"}}}

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

しかし、うまくいきません。

+0

はあなたのJSONを一度チェックしてくださいすることができ、それが11をUSERID理解するのは難しいが、ユーザーID 12または何の内部要素の配列が正しい構造であるのですか? –

+0

ok、ありがとう、今すぐチェック – 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 –

関連する問題