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

Kueri array MongoDB dan urutkan dengan elemen yang paling cocok

Anda dapat melakukan ini dengan kerangka kerja agregasi, meskipun tidak mudah. Masalahnya terletak pada tidak adanya $in operator sebagai bagian dari kerangka kerja agregasi. Jadi, Anda harus mencocokkan setiap item dalam array secara terprogram, yang menjadi sangat berantakan. edit :diurutkan ulang sehingga yang cocok adalah yang pertama, jika $in membantu Anda menyaring porsi yang baik.

db.test.aggregate(
  {$match:{"array.1":{$in:[100, 140,80]}}}, // filter to the ones that match
  {$unwind:"$array.1"}, // unwinds the array so we can match the items individually
  {$group: { // groups the array back, but adds a count for the number of matches
    _id:"$_id", 
    matches:{
      $sum:{
        $cond:[
          {$eq:["$array.1", 100]}, 
          1, 
          {$cond:[
            {$eq:["$array.1", 140]}, 
            1, 
            {$cond:[
              {$eq:["$array.1", 80]}, 
              1, 
              0
              ]
            }
            ]
          }
          ]
        }
      }, 
    item:{$first:"$array.item"}, 
    "1":{$push:"$array.1"}
    }
  }, 
  {$sort:{matches:-1}}, // sorts by the number of matches descending
  {$project:{matches:1, array:{item:"$item", 1:"$1"}}} // rebuilds the original structure
);

keluaran:

{
"result" : [
    {
        "_id" : ObjectId("50614c02162d92b4fbfa4448"),
        "matches" : 2,
        "array" : {
            "item" : 3,
            "1" : [
                100,
                90,
                140
            ]
        }
    },
    {
        "_id" : ObjectId("50614bb2162d92b4fbfa4446"),
        "matches" : 1,
        "array" : {
            "item" : 1,
            "1" : [
                100,
                130,
                255
            ]
        }
    }
],
"ok" : 1
}

Anda dapat meninggalkan matches keluar dari hasil jika Anda membiarkannya keluar dari $project di akhir.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Kunci sharding (MongoDB) untuk dokumen dalam jumlah besar

  2. Bagaimana saya bisa terhubung ke MongoDB Atlas menggunakan Robomongo?

  3. Bagaimana cara membuat kueri untuk memperbarui dokumen array bersarang di mongo?

  4. Gagal memulai mongod.service:Unit mongod.service tidak ditemukan

  5. Kesalahan:Tidak dapat memulai klien | sesi ekspres mongo-connect