MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Bagaimana cara melakukan Order By berdasarkan nilai di MongoDB?

Anda perlu $project sebuah "bobot" untuk setiap nilai secara berurutan dalam istilah MongoDB, dan itu berarti .aggregate() metode:

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 } }
])

Penggunaan bersarang dari $cond . ternary memungkinkan setiap item untuk "status" dianggap sebagai nilai "bobot" berurutan dalam urutan argumen yang diberikan.

Ini pada gilirannya diumpankan ke $sort , di mana nilai yang diproyeksikan ( "bobot" ) digunakan untuk mengurutkan hasil yang diberi skor oleh pencocokan berbobot.

Jadi dengan cara ini preferensi diberikan pada urutan kecocokan "status" yang muncul pertama kali dalam hasil yang diurutkan.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Koneksi MongoDb ditolak

  2. Proyeksi MongoDB dari Array Bersarang

  3. 6 Praktik Terbaik untuk Menyebarkan MongoDB di Amazon EC2

  4. Menyortir pada Beberapa bidang mongo DB

  5. Cara menanyakan koleksi sub dokumen menggunakan driver MongoDB dan C#