RESTHeart фильтрация и сортировка по вложенным документам

Я работаю с Mongodb и перезапустить.

В моей базе данных 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
                                             }
                                           ]
                               }
                         ]  
              }

мне нужно отфильтровать пользователя с userID = 11, и мне нужно упорядочить его события по возрастанию даты.

я пытался с:

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

но это не работает.

1 ответ

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
            }
        ]
    }
}
Другие вопросы по тегам