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

Bagaimana menemukan persimpangan set set antara dokumen dalam satu koleksi di MongoDB?

Gunakan kerangka agregasi untuk mendapatkan hasil yang diinginkan. Agregasi setel operator yang akan melakukan keajaiban adalah $setIntersection .

Pipa agregasi berikut mencapai apa yang Anda cari:

db.test.aggregate([
    {
        "$match": {
            "_id": { "$in": [1, 3] }
        }
    },
    {
        "$group": {
            "_id": 0,
            "set1": { "$first": "$set" },
            "set2": { "$last": "$set" }
        }
    },
    {
        "$project": { 
            "set1": 1, 
            "set2": 1, 
            "commonToBoth": { "$setIntersection": [ "$set1", "$set2" ] }, 
            "_id": 0 
        }
    }
])

Keluaran :

/* 0 */
{
    "result" : [ 
        {
            "set1" : [1,2,3,4,5],
            "set2" : [1,2,5,10,22],
            "commonToBoth" : [1,2,5]
        }
    ],
    "ok" : 1
}

PERBARUI

Agar tiga dokumen atau lebih berpotongan, Anda memerlukan $reduce operator untuk meratakan array. Ini akan memungkinkan Anda untuk memotong sejumlah larik, jadi alih-alih hanya melakukan perpotongan antara dua larik dari dokumen 1 dan 3, ini juga akan berlaku untuk beberapa larik.

Pertimbangkan untuk menjalankan operasi agregat berikut:

db.test.aggregate([
    { "$match": { "_id": { "$in": [1, 3] } } },
    {
        "$group": {
            "_id": 0,
            "sets": { "$push": "$set" },
            "initialSet": { "$first": "$set" }
        }
    },
    {
        "$project": {
            "commonSets": {
                "$reduce": {
                    "input": "$sets",
                    "initialValue": "$initialSet",
                    "in": { "$setIntersection": ["$$value", "$$this"] }
                }
            }
        }
    }
])



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana cara mengakses MongoDB Meteor dari klien lain, saat Meteor sedang berjalan?

  2. Pencarian bersarang MongoDB dengan 3 level

  3. Penolakan janji yang tidak tertangani:Kesalahan:URL salah format, tidak dapat diuraikan

  4. server mengembalikan kesalahan pada langkah otentikasi SASL:Otentikasi gagal

  5. MongoDB $persegi