Pengagregatan Kumpulan MongoDB

Pengagregatan Kumpulan Mongodb



Pengagregatan ialah prosedur mengekstrak data daripada koleksi MongoDB. Ia memproses banyak dokumen dan memberikan hasil yang dianggarkan. Pengagregatan dalam MongoDB mempunyai beberapa pengendali dan kaedah yang menjalankan pelbagai tugas. Di antara pengendali tersebut, pengendali $group mengumpulkan dokumen untuk setiap kumpulan unik dan menyusunnya mengikut ungkapan yang ditakrifkan. Pengendali kumpulan adalah penting dalam MongoDB kerana ia memudahkan pelbagai manipulasi data. Pengagregatan $kumpulan dalam contoh MongoDB bersama-sama dengan penumpuk berbeza disediakan di bawah.

Bagaimanakah Pengagregatan Kumpulan Berfungsi dalam MongoDB?

Operator $group harus digunakan untuk mengumpulkan dokumen input mengikut ungkapan _id yang ditentukan. Ia kemudiannya harus mengembalikan satu dokumen dengan jumlah nilai untuk setiap kumpulan berasingan. Untuk memulakan dengan pelaksanaan, kami telah mencipta koleksi 'Buku' dalam MongoDB. Selepas penciptaan koleksi 'Buku', kami telah memasukkan dokumen yang dikaitkan dengan medan yang berbeza. Dokumen dimasukkan ke dalam koleksi melalui kaedah insertMany() kerana pertanyaan yang akan dilaksanakan ditunjukkan di bawah.

>db.Books.insertMany([

{
_id:1,
tajuk: 'Anna Karenina',
harga: 290,
tahun: 1879,
order_status: 'Dalam stok',
pengarang: {
'nama': 'Leo Tolstoy'
}
},
{
_id:2,
tajuk: 'Untuk Membunuh Burung Ejek',
harga: 500,
tahun: 1960,
status_order: 'kehabisan stok',
pengarang: {
'nama': 'Harper Lee'
}
},
{
_id:3,
tajuk: 'Manusia Halimunan',
harga: 312,
tahun: 1953,
order_status: 'Dalam Stok',
pengarang: {
'nama':'Ralph Ellison'
}
},
{
_id:4,
tajuk: 'Kekasih',
harga: 370,
tahun: 1873,
status_order: 'stok_habis',
pengarang: {
'nama':'Toni Morrison'
}
},
{
_id:5,
tajuk: 'Things Fall Apart',
harga: 200,
tahun: 1958,
order_status: 'Dalam Stok',
pengarang: {
'nama':'Chinua Achebe'
}
},
{
_id:6,
tajuk: 'Warna Ungu',
harga: 510,
tahun: 1982,
status_order: 'kehabisan stok',
pengarang: {
'nama': 'Alice Walker'
}
}
])

Dokumen berjaya disimpan dalam koleksi 'Buku' tanpa menghadapi sebarang ralat kerana outputnya diakui sebagai 'benar'. Sekarang, kami akan menggunakan dokumen koleksi 'Buku' ini untuk melaksanakan pengagregatan '$kumpulan'.









Contoh # 1: Penggunaan $group Agregation



Penggunaan mudah pengagregatan $kumpulan ditunjukkan di sini. Pertanyaan agregat memasukkan operator '$group' dahulu kemudian operator '$group' selanjutnya mengambil ungkapan untuk menjana dokumen yang dikumpulkan.





>db.Books.aggregate([

{ $kumpulan:{ _id:'$author.name'} }

])

Pertanyaan di atas pengendali $group ditentukan dengan medan '_id' untuk mengira jumlah nilai untuk semua dokumen input. Kemudian, medan '_id' diperuntukkan dengan '$author.name' yang membentuk kumpulan berbeza pada medan '_id'. Nilai berasingan $author.name akan dikembalikan kerana kami tidak mengira sebarang nilai terkumpul. Pelaksanaan pertanyaan agregat $group mempunyai output berikut. Medan _id mempunyai nilai nama pengarang.



Contoh # 2: Penggunaan $group Agregation dengan $push Accumulator

Contoh pengagregatan $kumpulan menggunakan mana-mana penumpuk yang telah disebutkan di atas. Tetapi kita boleh menggunakan penumpuk dalam pengagregatan $kumpulan. Pengendali penumpuk ialah yang digunakan pada medan dokumen input selain daripada yang 'dikumpulkan' di bawah '_id'. Mari kita anggap bahawa kita ingin menolak medan ungkapan ke dalam tatasusunan kemudian penumpuk '$push' dipanggil dalam operator '$group'. Contoh ini akan membantu anda memahami penumpuk '$push' bagi '$group' dengan lebih jelas.

>db.Books.aggregate(

[

{ $kumpulan : { _id : '$_id', tahun: { $push: '$year' } } }

]

).cantik();

Di sini, kami ingin mengumpulkan tarikh tahun diterbitkan bagi buku yang diberikan dalam tatasusunan. Pertanyaan di atas harus digunakan untuk mencapai ini. Pertanyaan pengagregatan disediakan dengan ungkapan di mana pengendali '$group' mengambil ungkapan medan '_id' dan ungkapan medan 'year' untuk mendapatkan tahun kumpulan menggunakan penumpuk $push. Output yang diperoleh daripada pertanyaan khusus ini mencipta tatasusunan medan tahun dan menyimpan dokumen berkumpulan yang dikembalikan di dalamnya.

Contoh # 3: Penggunaan $group Agregation dengan '$min' Accumulator

Seterusnya, kami mempunyai penumpuk '$min' yang digunakan dalam pengagregatan $kumpulan untuk mendapatkan nilai padanan minimum daripada setiap dokumen dalam koleksi. Ungkapan pertanyaan untuk penumpuk $min diberikan di bawah.

>db.Books.aggregate([

{
$kumpulan:{
_ID:{
tajuk: '$title',
status_order: '$status_order'
},
minHarga:{$min: '$price'}
}
}
])

Pertanyaan mempunyai ungkapan pengagregatan '$kumpulan' di mana kami telah mengumpulkan dokumen untuk medan 'tajuk' dan 'status_pesanan'. Kemudian, kami menyediakan penumpuk $min yang mengumpulkan dokumen dengan mendapatkan nilai harga minimum daripada medan yang tidak dikumpulkan. Apabila kami menjalankan pertanyaan penumpuk $min ini di bawah, ia mengembalikan dokumen yang dikumpulkan mengikut tajuk dan status_perintah dalam urutan. Harga minimum muncul dahulu, dan harga tertinggi dokumen diletakkan terakhir.

Contoh # 4: Gunakan $group Agregation dengan $sum Accumulator

Untuk mendapatkan jumlah semua medan berangka menggunakan operator $group, operasi accumulator $sum digunakan. Nilai bukan angka dalam koleksi dipertimbangkan oleh penumpuk ini. Selain itu, kami menggunakan pengagregatan $padanan di sini dengan pengagregatan $kumpulan. Pengagregatan $match menerima syarat pertanyaan yang diberikan dalam dokumen dan menyerahkan dokumen yang dipadankan kepada pengagregatan $kumpulan yang kemudiannya mengembalikan jumlah dokumen untuk setiap kumpulan. Untuk penumpuk $sum, pertanyaan dibentangkan di bawah.

>db.Books.aggregate([

{ $match:{ order_status:'In-Stock'}},

{ $kumpulan:{ _id:'$author.name', jumlahBuku: { $sum:1 } }

}])

Pertanyaan pengagregatan di atas bermula dengan operator $match yang sepadan dengan semua 'status_order' yang statusnya ialah 'In-Stock' dan dihantar kepada $group sebagai input. Kemudian, pengendali $group mempunyai ungkapan penumpuk $sum yang menghasilkan jumlah semua buku dalam stok. Ambil perhatian bahawa “$sum:1” menambah 1 pada setiap dokumen yang dimiliki oleh kumpulan yang sama. Output di sini menunjukkan hanya dua dokumen berkumpulan yang mempunyai 'status_order' yang dikaitkan dengan 'Dalam Stok'.

Contoh # 5: Gunakan Pengagregatan $kumpulan dengan Pengagregatan $sort

Operator $group di sini digunakan dengan operator '$sort' yang digunakan untuk mengisih dokumen yang dikumpulkan. Pertanyaan berikut mempunyai tiga langkah untuk operasi pengisihan. Pertama ialah peringkat $match, kemudian peringkat $group, dan terakhir ialah peringkat $sort yang mengisih dokumen berkumpulan.

>db.Books.aggregate([

{ $perlawanan:{ status_pesanan:'habis-stok'}},

{ $kumpulan:{ _id:{ authorName :'$author.name'}, jumlahBuku: { $sum:1} } },

{ $sort:{ authorName:1}}

])

Di sini, kami telah mengambil dokumen yang dipadankan yang 'status_pesanan' kehabisan stok. Kemudian, dokumen yang dipadankan dimasukkan dalam peringkat $group yang mengumpulkan dokumen dengan medan 'authorName' dan 'totalBooks'. Ungkapan $group dikaitkan dengan penumpuk $sum kepada jumlah bilangan buku 'kehabisan stok'. Dokumen yang dikumpulkan kemudian diisih dengan ungkapan $sort dalam tertib menaik kerana '1' di sini menunjukkan susunan menaik. Dokumen kumpulan yang diisih dalam susunan yang ditentukan diperolehi dalam output berikut.

Contoh # 6: Gunakan Pengagregatan $kumpulan untuk Nilai Berbeza

Prosedur pengagregatan juga mengumpulkan dokumen mengikut item menggunakan operator $group untuk mengekstrak nilai item yang berbeza. Marilah kita mempunyai ungkapan pertanyaan pernyataan ini dalam MongoDB.

>db.Books.aggregate( [ { $kumpulan : { _id : '$tajuk' } } ] ).cantik();

Pertanyaan pengagregatan digunakan pada koleksi Buku untuk mendapatkan nilai tersendiri bagi dokumen kumpulan. $group di sini mengambil ungkapan _id yang mengeluarkan nilai yang berbeza kerana kami telah memasukkan medan 'tajuk' kepadanya. Output dokumen kumpulan diperoleh apabila menjalankan pertanyaan ini yang mempunyai kumpulan nama tajuk terhadap medan _id.

Kesimpulan

Panduan ini bertujuan untuk mengosongkan konsep operator agregasi $group untuk mengumpulkan dokumen dalam pangkalan data MongoDB. Pendekatan agregat MongoDB menambah baik fenomena kumpulan. Struktur sintaks pengendali $group ditunjukkan dengan contoh program. Sebagai tambahan kepada contoh asas pengendali $group, kami juga telah menggunakan operator ini dengan beberapa penumpuk seperti $push, $min, $sum, dan operator seperti $match dan $sort.