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

Dapatkan dokumen dengan tag dalam daftar, diurutkan berdasarkan jumlah total kecocokan

Seperti yang saya jawab di In MongoDB, cari dalam array dan urutkan berdasarkan jumlah kecocokan

Itu mungkin menggunakan Kerangka Agregasi.

Asumsi

  • tags atribut adalah himpunan (tidak ada elemen berulang)

Kueri

Pendekatan ini memaksa Anda untuk melepaskan hasil dan mengevaluasi kembali predikat kecocokan dengan hasil yang tidak ditentukan, sehingga benar-benar tidak efisien.

db.test_col.aggregate(
    {$match: {tags: {$in: ["shirt","cotton","black"]}}}, 
    {$unwind: "$tags"}, 
    {$match: {tags: {$in: ["shirt","cotton","black"]}}},
    {$group: {
        _id:{"_id":1}, 
        matches:{$sum:1}
    }}, 
    {$sort:{matches:-1}}
);

Hasil yang Diharapkan

{
    "result" : [
        {
            "_id" : {
                "_id" : ObjectId("5051f1786a64bd2c54918b26")
            },
            "matches" : 3
        },
        {
            "_id" : {
                "_id" : ObjectId("5051f1726a64bd2c54918b24")
            },
            "matches" : 2
        },
        {
            "_id" : {
                "_id" : ObjectId("5051f1756a64bd2c54918b25")
            },
            "matches" : 1
        }
    ],
    "ok" : 1
}


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Metode meteor vs. aturan tolak/izinkan

  2. mongodb versi 3.0.0 klien robomongo mongovue

  3. Mengapa luwak menggunakan skema ketika manfaat mongodb seharusnya adalah tanpa skema?

  4. MongoServer.State setara dalam driver 2.0

  5. MongoDB:perbarui setiap dokumen di satu bidang