mongoose按数组中多个对象的值排序

时间:2018-01-12 05:39:46

标签: mongodb mongoose

我们在查找mongoDB的排序数据时遇到问题。 这是我们的数据。 userData包含数组' eventList'。

[
 {
        "_id": "5a55eb107d4e4d5531d790e9",
        "id": "aa@aa.com",
        "intro": null,
        "name": "aaa",
        "eventList": [
            {
                "eventId": "5a2e18fa787af15faad72e5b",
                "title": "abc",
                "joinDate": "2018-01-12T00:17:33+09:00",
                "point": 0
            },
            {
                "eventId": "5a5486b9067610a13c4d401b",
                "title": "bcd",
                "joinDate": "2018-01-12T12:15:01+09:00",
                "point": 100
            }
        ]
    },
    {
        "_id": "5a5719520d76a14727a0c709",
        "id": "bbb@bbb.com",
        "intro": null,
        "name": "bbb",
        "eventList": [
            {
                "eventId": "5a2e18fa787af15faad72e5b",
                "title": "abc",
                "joinDate": "2018-01-11T16:59:16+09:00",
                "point": 12
            }
        ]
    },
    {
        "_id": "5a57193f99e37347212c33f8",
        "id": "ccc@ccc.com",
        "name" : "ccc",
        "eventList": [
            {
                "eventId": "5a2e18fa787af15faad72e5b",
                "title": "abc",
                "joinDate": "2018-01-11T16:58:57+09:00",
                "point": 3
            }
        ]
    }
]

我想通过"点"对这些文件进行排序。具有标题" abc"在userList数组中。 我该如何为此构建查询?

我查询了这个

User.find({"eventList.eventId" : {eventId}}).sort({"eventList.point":-1})

结果是a-b-c 但我认为那应该是b-c-a

我该如何解决这个问题? ( 谢谢..

1 个答案:

答案 0 :(得分:1)

使用Aggregation pipeline我们可以这样做,

$unwind展开eventList数组中的文档

$match找到匹配的文件

$sort对文档进行排序

db.collection_name.aggregate([
   {$unwind:"$eventList"},
   {$match:{"eventList.title":"abc"}}, 
   {$sort:{"eventList.point":-1}}
]);

按升序排序文件使用1和降序使用-1