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

Gunakan agregasi MongoDB untuk menemukan persimpangan set dari dua set dalam dokumen yang sama

Anda tidak jauh dari solusi lengkap dengan kerangka kerja agregasi - Anda memerlukan satu hal lagi sebelum $group langkah dan itu adalah sesuatu yang akan memungkinkan Anda untuk melihat apakah semua hal yang digunakan cocok dengan sesuatu yang dimiliki.

Berikut alur lengkapnya

> db.house.aggregate(
       {'$unwind':'$uses'}, 
       {'$unwind':'$rooms'}, 
       {'$unwind':'$rooms.owns'}, 
       {$project:  { _id:0, 
                     houseId:1, 
                     uses:"$uses.name", 
                     isOkay:{$cond:[{$eq:["$uses.name","$rooms.owns.name"]}, 1, 0]}
                   }
       }, 
       {$group: { _id:{house:"$houseId",item:"$uses"}, 
                  hasWhatHeUses:{$sum:"$isOkay"}
                }
       },
       {$match:{hasWhatHeUses:0}})

dan hasilnya pada dokumen Anda

{
    "result" : [
        {
            "_id" : {
                "house" : 123,
                "item" : "sofa"
            },
            "hasWhatHeUses" : 0
        }
    ],
    "ok" : 1
}

Penjelasan - setelah Anda membuka kedua array, Anda sekarang ingin menandai elemen di mana item yang digunakan sama dengan item yang dimiliki dan memberi mereka "skor" non-0. Sekarang ketika Anda mengelompokkan kembali barang-barang dengan houseId, Anda dapat memeriksa apakah ada barang bekas yang tidak cocok. Menggunakan 1 dan 0 untuk skor memungkinkan Anda melakukan penjumlahan dan sekarang kecocokan untuk item yang memiliki jumlah 0 berarti telah digunakan tetapi tidak cocok dengan apa pun di "dimiliki". Semoga Anda menikmati ini!



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. $elemCocokkan dan perbarui

  2. Cara menggunakan Spring Boot dengan MongoDB

  3. Membuat ISODate untuk MongoDB dengan PHP

  4. Permintaan penguraian kesalahan Mongoexport

  5. Cara cepat mengambil semua dokumen MongoDB pymongo