我们在查找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
我该如何解决这个问题? ( 谢谢..
答案 0 :(得分:1)
使用Aggregation pipeline我们可以这样做,
$unwind展开eventList数组中的文档
$match找到匹配的文件
$sort对文档进行排序
db.collection_name.aggregate([
{$unwind:"$eventList"},
{$match:{"eventList.title":"abc"}},
{$sort:{"eventList.point":-1}}
]);
按升序排序文件使用1和降序使用-1