Đây là một khái niệm chung được gọi là "trọng số". Vì vậy, nếu không có bất kỳ cơ chế nào khác, thì bạn xử lý điều này một cách hợp lý trong truy vấn MongoDB bằng cách "chiếu" các giá trị cho "trọng số" vào tài liệu một cách hợp lý.
Phương pháp của bạn để "chiếu" và thay đổi các trường có trong tài liệu của bạn là .aggregate()
và cụ thể là $project
giai đoạn đường ống:
db.collection.aggregate([
{ "$project": {
"getthisfirst": 1,
"weight": {
"$cond": [
{ "$eq": [ "$getthisfirst", "yes" ] },
10,
{ "$cond": [
{ "$eq": [ "$getthisfirst", "maybe" ] },
5,
0
]}
]
}
}},
{ "$sort": { "weight": -1 } }
]);
$cond
toán tử ở đây là "ternary"
(if / then / else) điều kiện trong đó đối số đầu tiên là trạng thái có điều kiện đến boolean true|false
. Nếu true
"then" đối số thứ hai được trả về là kết quả, nếu không thì đối số "else" hoặc đối số thứ ba được trả về trong phản hồi.
Trong trường hợp "lồng nhau" này, khi "có" là một trận đấu thì điểm "trọng số" nhất định sẽ được chỉ định, nếu không, chúng tôi chuyển sang bài kiểm tra điều kiện tiếp theo trong đó khi "có thể" là một trận đấu thì điểm anốt được chỉ định, hoặc nếu không thì điểm là 0
vì chúng tôi chỉ có ba vị trí để phù hợp.
Sau đó, $sort
điều kiện được áp dụng để "sắp xếp" (theo thứ tự giảm dần) các kết quả có "trọng số" lớn nhất ở trên cùng.