2015-10-09 11 views

cevap

0

ASC sıralamak -> durumunu: 1

db.users.find().sort({ status: 1 }) 

DESC sıralamak -> statü: -1

db.users.find().sort({ status: -1 }) 
+0

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. –

+0

Bir dizi (istediğiniz gibi) durumlarını parametre olarak göndermek ister misiniz? – makcs

5

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.