RESTHeart按子文档属性过滤和排序

时间:2017-05-09 12:19:01

标签: mongodb sorting subdocument restheart

我正在与mongodb和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
                                             }
                                           ]
                               }
                         ]  
              }

我需要使用userID = 11过滤用户,我需要按升序日期订购他的活动。

我正在尝试:

http://myhost:port/myCollection?keys= { “用户”:{ “$ elemMatch”:{ “用户ID”: “11”}}}&安培; sort_by = { “users.elements.events.date”: - 1}

但它不起作用。

1 个答案:

答案 0 :(得分: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
            }
        ]
    }
}