Bạn cần $project
"trọng số" cho mỗi giá trị theo thứ tự trong MongoDB và điều đó có nghĩa là .aggregate()
phương pháp:
db.users.aggregate([
{ "$project": {
"status": 1,
"a_field": 1,
"another_field": 1,
"pretty_much_every_field": 1,
"weight": {
"$cond": [
{ "$eq": [ "$status", "A" ] },
10,
{ "$cond": [
{ "$eq": [ "$status", "B" ] },
8,
{ "$cond": [
{ "$eq": [ "$status", "C" ] },
6,
{ "$cond": [
{ "$eq": [ "$status", "D" ] },
4,
0
]}
]}
]}
]
}
}},
{ "$sort": { "weight": -1 } }
])
Việc sử dụng lồng nhau của $cond
bậc ba cho phép mỗi mục cho "trạng thái" được coi là một giá trị "trọng số" được sắp xếp theo thứ tự của các đối số đã cho.
Đến lượt nó, điều này được cung cấp cho $sort
, trong đó giá trị dự kiến ("trọng số") được sử dụng để sắp xếp kết quả theo điểm của đối sánh có trọng số.
Vì vậy, theo cách này, ưu tiên được trao cho thứ tự của các kết quả phù hợp "trạng thái" xuất hiện đầu tiên trong các kết quả được sắp xếp.