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

Bagaimana cara menghitung beberapa kunci dalam kueri $group agregasi MongoDB yang sama?

Ada beberapa pendekatan berbeda yang dapat Anda gunakan di sini:

  1. Gunakan peta/kurangi:jangan lakukan ini. Saat ini akan jauh lebih cepat untuk menjalankan kerangka kerja agregasi 3 kali daripada menggunakan fungsi pengurangan peta untuk kasus penggunaan ini.

  2. Jalankan agregasi 3 kali. Ini tidak optimal, tetapi jika Anda tidak memiliki batasan waktu maka ini adalah opsi termudah. Jika agregasi Anda membutuhkan waktu

  3. Inilah solusi terbaik yang dapat saya pikirkan. $group operator memungkinkan Anda membuat _id pada beberapa bidang. Misalnya. {"_id":{"a":"$key1", "b":"$key2", "c":"$key3"}} . Melakukan hal ini membuat pengelompokan untuk semua kombinasi yang ada dari kunci Anda yang berbeda. Anda berpotensi dapat mengelompokkan kunci Anda dengan cara ini dan kemudian secara manual menjumlahkan seluruh hasil di klien.

Biarkan saya menguraikan. Katakanlah kita memiliki koleksi bentuk. Bentuk-bentuk ini dapat memiliki warna, ukuran, dan jenis (persegi, lingkaran, dll). Agregasi pada ID multi-kunci dapat terlihat seperti:

db.shapes.aggregate({$group:{_id:{"f1":"$f1", "f2":"$f2", "f3":"$f3"}, count:{"$sum":1}}})

dan kembali:

"result" : [
        {
            "_id" : {
                "f1" : "yellow",
                "f2" : "medium",
                "f3" : "triangle"
            },
            "count" : 4086
        },
        {
            "_id" : {
                "f1" : "red",
                "f2" : "small",
                "f3" : "triangle"
            },
            "count" : 4138
        },
        {
            "_id" : {
                "f1" : "red",
                "f2" : "big",
                "f3" : "square"
            },
            "count" : 4113
        },
        {
            "_id" : {
                "f1" : "yellow",
                "f2" : "small",
                "f3" : "triangle"
            },
            "count" : 4145
        },
        {
            "_id" : {
                "f1" : "red",
                "f2" : "small",
                "f3" : "square"
            },
            "count" : 4062
        }

... dan seterusnya

Anda kemudian akan meringkas hasil sisi klien, dengan jumlah entri yang berkurang secara drastis. Dengan asumsi jumlah nilai unik untuk setiap kunci cukup kecil dibandingkan dengan jumlah total dokumen, Anda dapat melakukan langkah terakhir ini dalam waktu yang dapat diabaikan.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongodb C# pembaruan/penggantian massal pada subkoleksi

  2. tidak dapat melakukan panggilan istirahat

  3. Bagaimana cara mengonversi BSON Timestamp dari Mongo changestream ke tanggal?

  4. Tidak dapat terhubung ke MongoDB errno:61

  5. Bagaimana saya bisa menjanjikan driver Javascript asli MongoDB menggunakan bluebird?