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

Bagaimana cara mengurutkan koleksi berdasarkan nilai dalam array?

Seperti yang mungkin sudah Anda coba, Anda tidak dapat menentukan item tertentu di dalam array sebagai "kunci" untuk "mengurutkan" dengan pencarian sederhana. Untuk ini, Anda akan memerlukan metode agregat untuk mendapatkan kunci yang ingin Anda urutkan.

db.exam.aggregate([

     # Unwind to de-normalize
     { "$unwind": "$result" },

     # Group back to the document and extract each score
     { "$group": {
         "_id": "$_id",
         "result": { "$push": "$result" },
         "useruid": { "$first": "$useruid" },
         "exam_code": { "$first": "$exam_code" },
         "ess_time": { "$first": "$ess_time" },
         "Total": { 
             "$max": {
                 "$cond": [
                     { "$eq": [ "$result.subject", "Total" ] },
                     "$result.score",
                     0
                 ]
             }
         },
         "Physics": { 
             "$max": {
                 "$cond": [
                     { "$eq": [ "$result.subject", "Physics" ] },
                     "$result.score",
                     0
                 ]
             }
         },
         "Mathematics": { 
             "$max": {
                 "$cond": [
                     { "$eq": [ "$result.subject", "Mathematics" ] },
                     "$result.score",
                     0
                 ]
             }
         },
         "Chemistry": { 
             "$max": {
                 "$cond": [
                     { "$eq": [ "$result.subject", "Chemistry" ] },
                     "$result.score",
                     0
                 ]
             }
         },
         "Biology": { 
             "$max": {
                 "$cond": [
                     { "$eq": [ "$result.subject", "Biology" ] },
                     "$result.score",
                     0
                 ]
             }
         }
     }},

     # Sort on those scores
     { "$sort": {
         "Total": -1,
         "Physics": -1,
         "Mathematics": -1,
         "Chemistry": -1,
         "Biology": -1
     }},

     # Project final wanted fields
     { "$project": {
         "result": 1,
         "useruid": 1,
         "exam_code": 1,
         "ess_time": 1
     }}
])

Jadi di sini Anda "mengekstrak" nilai yang cocok menggunakan $cond operator dalam $max pernyataan setelah melepas array. Dokumen yang dinormalisasi tidak semuanya memiliki nilai yang sama seperti yang sekarang mewakili item dalam larik, jadi Anda mengujinya.

Dengan kunci yang diekstrak tersebut, Anda dapat mengurutkan kembali seluruh dokumen, dan akhirnya membuang kolom tersebut karena tidak lagi diperlukan.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana IAsyncCursor digunakan untuk iterasi dengan driver mongodb c#?

  2. Kueri agregasi luwak gagal dalam tes Jest/Mockgoose, berfungsi di tempat lain

  3. TypeError pada metode statis model luwak

  4. Konversi gambar base64 ke file di Node Js

  5. Bergabunglah dengan dua koleksi di MongoDB