Apa itu grup dalam agregasi mongodb?

Operator grup (juga dikenal sebagai operator akumulator) adalah operator penting dalam bahasa MongoDB, karena membantu melakukan berbagai transformasi data. Ini adalah bagian dari agregasi di MongoDB. MongoDB adalah program manajemen basis data NoSQL sumber terbuka

NoSQL adalah alternatif untuk basis data relasional tradisional. Basis data NoSQL cukup berguna saat bekerja dengan set besar data terdistribusi. MongoDB adalah alat yang dapat mengelola informasi berorientasi dokumen, menyimpan, atau mengambil informasi

Pada artikel ini, kita akan belajar tentang operator $group dengan beberapa contoh

Prasyarat

Sebelum kita mulai, pastikan Anda memiliki yang berikut ini

  • MongoDB terinstal di sistem Anda. Untuk menginstal MongoDB dengan aman di sistem Anda, kunjungi dokumentasi resmi melalui tautan ini https. //dokumen. mongodb. com/manual/instalasi/

  • Harus memiliki pengetahuan sebelumnya tentang MongoDB dan perintah shellnya

Pengumpulan

Agregasi adalah operasi yang memproses data untuk memberikan hasil yang dihitung. Operasi agregasi mengelompokkan nilai dari beberapa dokumen secara bersamaan dan dapat melakukan berbagai operasi pada data yang dikelompokkan untuk mengembalikan satu hasil. Ini melibatkan tahapan atau jalur pipa di mana data diproses untuk menghasilkan hasil gabungan

Pipeline adalah tahapan di mana data diproses, lebih teknis diubah menjadi kriteria yang disediakan. Setiap pipa independen dan menerima data dari tahap sebelumnya. Ingatlah selalu bahwa pipeline pertama akan memiliki kontak langsung dengan data itu sendiri, bukan versi transformasinya, dan dapat memanfaatkan indeks

Apa itu operator $grup?

Seperti namanya, operator $group_ mengelompokkan data serupa dengan beberapa ekspresi tertentu dan menggabungkannya menjadi satu hasil atau dokumen

Misalkan ada 15 orang dalam database dan mereka semua memiliki hobi yang sama. Jika kita ingin menghitung semua orang yang memiliki hobi yang sama, maka operator $group adalah solusi elegan untuk tugas semacam itu

Mari kita lihat sintaksnya

{ $group: { _id: <expression>, <field1>: { <accumulator1> : <expression1> }, .. } }

Bidang

db.person.insertMany([
    {
        "_id" : ObjectId("5ffb0dd58591ec5a52d2afbd"),
        "name" : "Harit Joshi",
        "age" : 18,
        "gender" : "Male",
        "hobbies" : [
                "sports",
                "cooking",
                "gaming"
        ]
    },
    {
        "_id" : ObjectId("5ffb0dd58591ec5a52d2afbe"),
        "name" : "Maria Swartz",
        "age" : 27,
        "gender" : "Female",
        "hobbies" : [
                "sports",
                "swimming",
                "gaming"
        ]
    },
    {
        "_id" : ObjectId("5ffb0dd58591ec5a52d2afbf"),
        "name" : "Billy Marton",
        "age" : 34,
        "gender" : "Male",
        "hobbies" : [
                "singing",
                "cooking",
                "jogging"
        ]
    }
])
0 dalam dokumen keluaran berisi grup yang berbeda berdasarkan kunci. Dokumen keluaran juga dapat berisi bidang yang dihitung yang menyimpan nilai beberapa ekspresi akumulator yang dikelompokkan berdasarkan bidang
db.person.insertMany([
    {
        "_id" : ObjectId("5ffb0dd58591ec5a52d2afbd"),
        "name" : "Harit Joshi",
        "age" : 18,
        "gender" : "Male",
        "hobbies" : [
                "sports",
                "cooking",
                "gaming"
        ]
    },
    {
        "_id" : ObjectId("5ffb0dd58591ec5a52d2afbe"),
        "name" : "Maria Swartz",
        "age" : 27,
        "gender" : "Female",
        "hobbies" : [
                "sports",
                "swimming",
                "gaming"
        ]
    },
    {
        "_id" : ObjectId("5ffb0dd58591ec5a52d2afbf"),
        "name" : "Billy Marton",
        "age" : 34,
        "gender" : "Male",
        "hobbies" : [
                "singing",
                "cooking",
                "jogging"
        ]
    }
])
0 $group

Bidang

db.person.insertMany([
    {
        "_id" : ObjectId("5ffb0dd58591ec5a52d2afbd"),
        "name" : "Harit Joshi",
        "age" : 18,
        "gender" : "Male",
        "hobbies" : [
                "sports",
                "cooking",
                "gaming"
        ]
    },
    {
        "_id" : ObjectId("5ffb0dd58591ec5a52d2afbe"),
        "name" : "Maria Swartz",
        "age" : 27,
        "gender" : "Female",
        "hobbies" : [
                "sports",
                "swimming",
                "gaming"
        ]
    },
    {
        "_id" : ObjectId("5ffb0dd58591ec5a52d2afbf"),
        "name" : "Billy Marton",
        "age" : 34,
        "gender" : "Male",
        "hobbies" : [
                "singing",
                "cooking",
                "jogging"
        ]
    }
])
0 di sini akan mengambil bidang yang ingin Anda gunakan untuk mengelompokkan dokumen. Wajib menggunakan
db.person.insertMany([
    {
        "_id" : ObjectId("5ffb0dd58591ec5a52d2afbd"),
        "name" : "Harit Joshi",
        "age" : 18,
        "gender" : "Male",
        "hobbies" : [
                "sports",
                "cooking",
                "gaming"
        ]
    },
    {
        "_id" : ObjectId("5ffb0dd58591ec5a52d2afbe"),
        "name" : "Maria Swartz",
        "age" : 27,
        "gender" : "Female",
        "hobbies" : [
                "sports",
                "swimming",
                "gaming"
        ]
    },
    {
        "_id" : ObjectId("5ffb0dd58591ec5a52d2afbf"),
        "name" : "Billy Marton",
        "age" : 34,
        "gender" : "Male",
        "hobbies" : [
                "singing",
                "cooking",
                "jogging"
        ]
    }
])
0 di sini

Operator $group tidak menghapus data dari database. Itu hanya mengumpulkan banyak dokumen menjadi satu dokumen berdasarkan bidang yang diteruskan ke bidang

db.person.insertMany([
    {
        "_id" : ObjectId("5ffb0dd58591ec5a52d2afbd"),
        "name" : "Harit Joshi",
        "age" : 18,
        "gender" : "Male",
        "hobbies" : [
                "sports",
                "cooking",
                "gaming"
        ]
    },
    {
        "_id" : ObjectId("5ffb0dd58591ec5a52d2afbe"),
        "name" : "Maria Swartz",
        "age" : 27,
        "gender" : "Female",
        "hobbies" : [
                "sports",
                "swimming",
                "gaming"
        ]
    },
    {
        "_id" : ObjectId("5ffb0dd58591ec5a52d2afbf"),
        "name" : "Billy Marton",
        "age" : 34,
        "gender" : "Male",
        "hobbies" : [
                "singing",
                "cooking",
                "jogging"
        ]
    }
])
0

Poin penting untuk diingat

  • Ini tidak dapat digunakan dengan operator

    db.person.insertMany([
        {
            "_id" : ObjectId("5ffb0dd58591ec5a52d2afbd"),
            "name" : "Harit Joshi",
            "age" : 18,
            "gender" : "Male",
            "hobbies" : [
                    "sports",
                    "cooking",
                    "gaming"
            ]
        },
        {
            "_id" : ObjectId("5ffb0dd58591ec5a52d2afbe"),
            "name" : "Maria Swartz",
            "age" : 27,
            "gender" : "Female",
            "hobbies" : [
                    "sports",
                    "swimming",
                    "gaming"
            ]
        },
        {
            "_id" : ObjectId("5ffb0dd58591ec5a52d2afbf"),
            "name" : "Billy Marton",
            "age" : 34,
            "gender" : "Male",
            "hobbies" : [
                    "singing",
                    "cooking",
                    "jogging"
            ]
        }
    ])
    
    5

  • Saat mem-parsing dan memberi nama (aliasing) bidang, hindari menggunakan nama fungsi pengelompokan atau operator lain sebagai nama bidang

  • Saat menggunakan hitungan, atau fungsi pengelompokan apa pun, ingatlah untuk menyertakan garis bawah sebelum nama bidang (urutkan berdasarkan _hitung)

  • Beberapa fungsi agregasi dapat berada di baris yang sama tetapi Anda tidak dapat menyertakan fungsi lain, seperti fungsi matematika, di baris kueri yang sama

Contoh

Sekarang, mari kita lihat sebuah contoh. Cuplikan kode harus dijalankan di shell mongo

Mari kita membuat database

use review 
_

Sekarang, mari buat koleksi bernama

db.person.insertMany([
    {
        "_id" : ObjectId("5ffb0dd58591ec5a52d2afbd"),
        "name" : "Harit Joshi",
        "age" : 18,
        "gender" : "Male",
        "hobbies" : [
                "sports",
                "cooking",
                "gaming"
        ]
    },
    {
        "_id" : ObjectId("5ffb0dd58591ec5a52d2afbe"),
        "name" : "Maria Swartz",
        "age" : 27,
        "gender" : "Female",
        "hobbies" : [
                "sports",
                "swimming",
                "gaming"
        ]
    },
    {
        "_id" : ObjectId("5ffb0dd58591ec5a52d2afbf"),
        "name" : "Billy Marton",
        "age" : 34,
        "gender" : "Male",
        "hobbies" : [
                "singing",
                "cooking",
                "jogging"
        ]
    }
])
6 dan masukkan beberapa dokumen ke dalam koleksi tersebut menggunakan fungsi
db.person.insertMany([
    {
        "_id" : ObjectId("5ffb0dd58591ec5a52d2afbd"),
        "name" : "Harit Joshi",
        "age" : 18,
        "gender" : "Male",
        "hobbies" : [
                "sports",
                "cooking",
                "gaming"
        ]
    },
    {
        "_id" : ObjectId("5ffb0dd58591ec5a52d2afbe"),
        "name" : "Maria Swartz",
        "age" : 27,
        "gender" : "Female",
        "hobbies" : [
                "sports",
                "swimming",
                "gaming"
        ]
    },
    {
        "_id" : ObjectId("5ffb0dd58591ec5a52d2afbf"),
        "name" : "Billy Marton",
        "age" : 34,
        "gender" : "Male",
        "hobbies" : [
                "singing",
                "cooking",
                "jogging"
        ]
    }
])
7 seperti

db.person.insertMany([
    {
        "_id" : ObjectId("5ffb0dd58591ec5a52d2afbd"),
        "name" : "Harit Joshi",
        "age" : 18,
        "gender" : "Male",
        "hobbies" : [
                "sports",
                "cooking",
                "gaming"
        ]
    },
    {
        "_id" : ObjectId("5ffb0dd58591ec5a52d2afbe"),
        "name" : "Maria Swartz",
        "age" : 27,
        "gender" : "Female",
        "hobbies" : [
                "sports",
                "swimming",
                "gaming"
        ]
    },
    {
        "_id" : ObjectId("5ffb0dd58591ec5a52d2afbf"),
        "name" : "Billy Marton",
        "age" : 34,
        "gender" : "Male",
        "hobbies" : [
                "singing",
                "cooking",
                "jogging"
        ]
    }
])

Sekarang kita memiliki beberapa dokumen dalam koleksi, mari kita gunakan $group untuk menemukan jumlah laki-laki dan perempuan dalam koleksi

Untuk melakukan itu kita harus menggunakan fungsi

db.person.insertMany([
    {
        "_id" : ObjectId("5ffb0dd58591ec5a52d2afbd"),
        "name" : "Harit Joshi",
        "age" : 18,
        "gender" : "Male",
        "hobbies" : [
                "sports",
                "cooking",
                "gaming"
        ]
    },
    {
        "_id" : ObjectId("5ffb0dd58591ec5a52d2afbe"),
        "name" : "Maria Swartz",
        "age" : 27,
        "gender" : "Female",
        "hobbies" : [
                "sports",
                "swimming",
                "gaming"
        ]
    },
    {
        "_id" : ObjectId("5ffb0dd58591ec5a52d2afbf"),
        "name" : "Billy Marton",
        "age" : 34,
        "gender" : "Male",
        "hobbies" : [
                "singing",
                "cooking",
                "jogging"
        ]
    }
])
_9 pada koleksi yang mengambil array pipa atau tahapan di mana data dalam koleksi itu akan diubah. Karena kita tertarik untuk mengelompokkan data, kita harus menggunakan operator $group bersama dengan operator akumulator

Anda harus memberikan kunci yang akan menyimpan hasil dari operator akumulator. Untuk contoh ini, kami menggunakan

db.<name of the collection>.aggregate([ 'array of pipelines' ])
_1 sebagai kunci dan ini akan membantu kami mengumpulkan data

Sintaks fungsi

db.person.insertMany([
    {
        "_id" : ObjectId("5ffb0dd58591ec5a52d2afbd"),
        "name" : "Harit Joshi",
        "age" : 18,
        "gender" : "Male",
        "hobbies" : [
                "sports",
                "cooking",
                "gaming"
        ]
    },
    {
        "_id" : ObjectId("5ffb0dd58591ec5a52d2afbe"),
        "name" : "Maria Swartz",
        "age" : 27,
        "gender" : "Female",
        "hobbies" : [
                "sports",
                "swimming",
                "gaming"
        ]
    },
    {
        "_id" : ObjectId("5ffb0dd58591ec5a52d2afbf"),
        "name" : "Billy Marton",
        "age" : 34,
        "gender" : "Male",
        "hobbies" : [
                "singing",
                "cooking",
                "jogging"
        ]
    }
])
_9

db.<name of the collection>.aggregate([ 'array of pipelines' ])

Catatan. Alur atau tahapan dalam fungsi ________0______9 akan selalu dalam format dokumen

Sekarang menerapkan logika dan sintaks yang kita pelajari di atas, kueri akan terlihat seperti

db.person.aggregate([ { $group: {_id: {gender: "$gender"}, totalPeople: {$sum: 1}} } ]).pretty()

Keluaran

{ "_id" : { "gender" : "Female" }, "totalPeople" : 1 }
{ "_id" : { "gender" : "Male" }, "totalPeople" : 2 }

Seperti yang Anda lihat, bidang

db.person.insertMany([
    {
        "_id" : ObjectId("5ffb0dd58591ec5a52d2afbd"),
        "name" : "Harit Joshi",
        "age" : 18,
        "gender" : "Male",
        "hobbies" : [
                "sports",
                "cooking",
                "gaming"
        ]
    },
    {
        "_id" : ObjectId("5ffb0dd58591ec5a52d2afbe"),
        "name" : "Maria Swartz",
        "age" : 27,
        "gender" : "Female",
        "hobbies" : [
                "sports",
                "swimming",
                "gaming"
        ]
    },
    {
        "_id" : ObjectId("5ffb0dd58591ec5a52d2afbf"),
        "name" : "Billy Marton",
        "age" : 34,
        "gender" : "Male",
        "hobbies" : [
                "singing",
                "cooking",
                "jogging"
        ]
    }
])
_0 akan menampung bidang atau kriteria yang Anda gunakan untuk mengelompokkan data Anda dan
db.<name of the collection>.aggregate([ 'array of pipelines' ])
5 adalah kunci yang menyimpan hasil operator akumulator i. e. , operator
db.<name of the collection>.aggregate([ 'array of pipelines' ])
_6

Operator

db.<name of the collection>.aggregate([ 'array of pipelines' ])
_6 akan mengembalikan jumlah kolektif semua nilai numerik dari menerapkan ekspresi tertentu ke setiap dokumen dalam grup dokumen yang berbagi grup yang sama dengan kunci

Agar operator $group bekerja, Anda harus menggunakan operator akumulator seperti

db.<name of the collection>.aggregate([ 'array of pipelines' ])
6,
db.person.aggregate([ { $group: {_id: {gender: "$gender"}, totalPeople: {$sum: 1}} } ]).pretty()
0,
db.person.aggregate([ { $group: {_id: {gender: "$gender"}, totalPeople: {$sum: 1}} } ]).pretty()
1, atau
db.person.aggregate([ { $group: {_id: {gender: "$gender"}, totalPeople: {$sum: 1}} } ]).pretty()
2. Karena operator menghasilkan hasil gabungan berdasarkan ekspresi pengelompokan

Untuk mempelajari lebih lanjut tentang operator akumulator, silakan kunjungi dokumentasi resmi MongoDB

Mari kita lihat kasus penggunaan lainnya. Katakanlah kita tertarik pada jumlah orang yang memiliki hobi serupa. Untuk mencapai ini, kita harus menjadikan setiap hobi sebagai bidang tingkat atas yang terpisah dengan menggunakan operator

db.person.aggregate([ { $group: {_id: {gender: "$gender"}, totalPeople: {$sum: 1}} } ]).pretty()
3

Operator

db.person.aggregate([ { $group: {_id: {gender: "$gender"}, totalPeople: {$sum: 1}} } ]).pretty()
_3 akan mengeluarkan setiap nilai satu per satu dari array, tempat Anda menggunakan operator ini dan menetapkannya ke kunci yang menyimpan array itu dalam bentuk pasangan kunci-nilai tunggal

Ini memungkinkan lebih banyak fleksibilitas untuk menanyakan array dan data dalam database. Kemudian kita harus melakukan hal yang sama seperti yang kita lakukan pada contoh pertama karena, hobi bukanlah sebuah array tetapi bidang tingkat atas dalam bentuk nilai kunci, dan menerapkan operator $group akan membuatnya lebih mudah

db.person.aggregate([ {$unwind: "$hobbies"}, { $group: {_id: {hobby: "$hobbies"}, totalPeople: {$sum: 1}} } ]).pretty() 

Keluaran

{ "_id" : { "hobby" : "jogging" }, "totalPeople" : 1 }
{ "_id" : { "hobby" : "singing" }, "totalPeople" : 1 }
{ "_id" : { "hobby" : "cooking" }, "totalPeople" : 2 }
{ "_id" : { "hobby" : "gaming" }, "totalPeople" : 2 }
{ "_id" : { "hobby" : "sports" }, "totalPeople" : 2 }
{ "_id" : { "hobby" : "swimming" }, "totalPeople" : 1 }

Untuk mempelajari lebih lanjut tentang operator

db.person.aggregate([ { $group: {_id: {gender: "$gender"}, totalPeople: {$sum: 1}} } ]).pretty()
_3, silakan kunjungi dokumentasi resmi MongoDB

Aplikasi operator $group

  1. Setiap kali kami perlu menemukan berapa banyak orang yang cocok dalam grup seperti yang kami lakukan dalam contoh kami, operator $group bisa sangat berguna

  2. Ini juga berguna dalam situasi di mana kita ingin melihat dokumen berdasarkan beberapa kejadian berulang dari data lain

  3. Jika kami ingin membuat larik entitas serupa yang terkait dengan data dan memasukkannya ke dalam dokumen akhir kami, maka operator $group dapat digunakan

    Apa perbedaan antara grup dan proyek di MongoDB?

    $group digunakan untuk mengelompokkan dokumen input dengan ekspresi _id yang ditentukan dan untuk setiap pengelompokan yang berbeda, menghasilkan dokumen. $project digunakan untuk meneruskan dokumen dengan bidang yang diminta ke tahap berikutnya dalam alur

    Apakah grup koleksi di MongoDB?

    Koleksi adalah grup MongoDB ___________? . Koleksi adalah sekelompok dokumen MongoDB . Ini setara dengan tabel RDBMS. Koleksi ada dalam satu database.

    Bagaimana cara menggunakan kecocokan dan grup di MongoDB?

    Contoh berikut menunjukkan pipa agregasi dengan tahap $match tunggal. .
    Contoh. Tahap $pertandingan. db. karyawan. .
    Contoh. Tahap $grup. db. karyawan. .
    Contoh. Dapatkan Nilai Akumulasi. db. .
    Contoh. $cocok dan $grup. db. .
    Contoh. Dapatkan Jumlah Bidang. db. .
    Contoh. Sortir Dokumen. db. .
    Contoh. Sortir Data yang Dikelompokkan. db

    Apa yang benar tentang tahapan $group dalam kerangka kerja agregasi?

    Apa yang benar tentang tahapan $group dalam kerangka kerja agregasi ? . Ini adalah operasi pemfilteran sehingga dapat mengurangi jumlah dokumen yang diberikan sebagai input ke tahap selanjutnya .