Ini sebagai konsep umum disebut "pembobotan". Jadi tanpa mekanisme lain, maka Anda menangani ini secara logis dalam kueri MongoDB dengan "memproyeksikan" nilai untuk "bobot" ke dalam dokumen secara logis.
Metode Anda untuk "memproyeksikan" dan mengubah bidang yang ada di dokumen Anda adalah .aggregate()
metode, dan khususnya $project
tahap saluran:
db.collection.aggregate([
{ "$project": {
"getthisfirst": 1,
"weight": {
"$cond": [
{ "$eq": [ "$getthisfirst", "yes" ] },
10,
{ "$cond": [
{ "$eq": [ "$getthisfirst", "maybe" ] },
5,
0
]}
]
}
}},
{ "$sort": { "weight": -1 } }
]);
$cond
operator di sini adalah "ternary"
( if/then/else ) kondisi di mana argumen pertama adalah pernyataan bersyarat yang sampai ke boolean true|false
. Jika true
"maka" argumen kedua dikembalikan sebagai hasilnya, jika tidak, argumen "lain" atau ketiga dikembalikan sebagai tanggapan.
Dalam kasus "bersarang" ini, maka di mana "ya" cocok maka skor "bobot" tertentu diberikan, jika tidak, kita beralih ke tes kondisi berikutnya di mana ketika "mungkin" cocok maka skor lain diberikan, atau jika tidak, skornya adalah 0
karena kita hanya memiliki tiga kemungkinan untuk dicocokkan.
Kemudian $sort
kondisi diterapkan untuk, baik "urutkan" ( dalam urutan menurun ) hasil dengan "bobot" terbesar di atas.