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

Temukan dokumen yang bidang arraynya berisi setidaknya n elemen dari array yang diberikan

Katakanlah kita memiliki dokumen berikut dalam koleksi kita:

{ "_id" : ObjectId("5759658e654456bf4a014d01"), "a" : [ 1, 3, 9, 2, 9, 0 ] }
{ "_id" : ObjectId("5759658e654456bf4a014d02"), "a" : [ 0, 8, 1 ] }
{ "_id" : ObjectId("5759658e654456bf4a014d03"), "a" : [ 0, 8, 432, 9, 34, -3 ] }
{ "_id" : ObjectId("5759658e654456bf4a014d04"), "a" : [ 0, 0, 4, 3, 2, 7 ] }

dan array input berikut dan n = 2

var inputArray = [1, 3, 0];

Kita dapat mengembalikan dokumen-dokumen di mana bidang array berisi setidaknya n elemen dari array yang diberikan menggunakan kerangka kerja agregasi.

$match hanya memilih dokumen-dokumen dengan panjang larik lebih besar atau sama dengan n . Hal ini mengurangi jumlah data yang akan diproses di dalam pipeline.

$redact operator pipa menggunakan pemrosesan kondisi logis menggunakan $cond operator dan operasi khusus $$KEEP untuk "menyimpan" dokumen dengan kondisi logika benar atau $$PRUNE untuk "membuang" dokumen yang kondisinya salah.

Dalam kasus kami, kondisinya adalah $gte yang mengembalikan true jika $size dari perpotongan dua larik, yang kami hitung menggunakan $setIntersection operator lebih besar dari atau sama dengan 2 .

db.collection.aggregate(
    [ 
        { "$match": { "a.1": { "$exists": true } } }, 
        { "$redact": { 
            "$cond": [ 
                { "$gte": [ 
                    { "$size": { "$setIntersection": [ "$a", inputArray ] } }, 
                    2
                ]},
                "$$KEEP", 
                "$$PRUNE" 
            ]
        }}
    ]
)

yang menghasilkan:

{ "_id" : ObjectId("5759658e654456bf4a014d01"), "a" : [ 1, 3, 9, 2, 9, 0 ] }
{ "_id" : ObjectId("5759658e654456bf4a014d02"), "a" : [ 0, 8, 1 ] }
{ "_id" : ObjectId("5759658e654456bf4a014d04"), "a" : [ 0, 0, 4, 3, 2, 7 ] }


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

  2. Dokumen Duplikat MongoDB bahkan setelah menambahkan kunci unik

  3. MongoDB $weeklyUpdate #65 (15 April 2022):Waktu GDELT, Mongoose, &Hackathon!

  4. MongoDB sebagai layanan antrian?

  5. Cara memperbarui dokumen yang ada di MongoDB