Sen amacıyla $project
için her değer için bir "ağırlık" gerek MongoDB terimlerinde ve bu .aggregate()
yöntemi anlamına gelir:
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 } }
])
ternary$cond
'un iç içe kullanımı, "durum" için her öğenin verilen argüman sırasına göre "ağırlık" değeri olarak kabul edilmesine izin verir.
Bu, sonuçta, ağırlıklı eşlemenin puanlarını değerlendirmek için yansıtılan değerin ("ağırlık") kullanıldığı $sort
'a beslenir.
Böylelikle tercih, sıralanan sonuçlarda ilk olarak görünen "durum" eşleşmeleri sırasına göre verilir.
Bu basit bir sıralamadır. Değerlere göre nasıl sıralayabilirim. So- durumu, 'C', 'A', 'B', 'D' - bu, kullanıcılara ilk önce 'A' durumuyla geri dönecek ve böyle devam edecektir. –
Bir dizi (istediğiniz gibi) durumlarını parametre olarak göndermek ister misiniz? – makcs