Agregasi adalah proses pemilihan data dari koleksi di MongoDB. Ini memproses banyak dokumen dan mengembalikan hasil yang dihitung
Gunakan agregasi untuk mengelompokkan nilai dari beberapa dokumen, atau lakukan operasi pada data yang dikelompokkan untuk mengembalikan satu hasil
Operasi agregasi dapat dilakukan dengan dua cara
- Menggunakan Pipa Agregasi
- Menggunakan metode agregasi tujuan tunggal. , Dan
Pipa Agregasi
Pipa agregasi adalah larik dari satu atau lebih tahapan yang diteruskan dalam metode db.employees.insertMany([ { _id:1, firstName: "John", lastName: "King", gender:'male', email: "[email protected]", salary: 5000, department: { "name":"HR" } }, { _id:2, firstName: "Sachin", lastName: "T", gender:'male', email: "[email protected]", salary: 8000, department: { "name":"Finance" } }, { _id:3, firstName: "James", lastName: "Bond", gender:'male', email: "[email protected]", salary: 7500, department: { "name":"Marketing" } }, { _id:4, firstName: "Rosy", lastName: "Brown", gender:'female', email: "[email protected]", salary: 5000, department: { "name":"HR" } }, { _id:5, firstName: "Kapil", lastName: "D", gender:'male', email: "[email protected]", salary: 4500, department: { "name":"Finance" } }, { _id:6, firstName: "Amitabh", lastName: "B", gender:'male', email: "[email protected]", salary: 7000, department: { "name":"Marketing" } } ]) 6 atau db.employees.insertMany([ { _id:1, firstName: "John", lastName: "King", gender:'male', email: "[email protected]", salary: 5000, department: { "name":"HR" } }, { _id:2, firstName: "Sachin", lastName: "T", gender:'male', email: "[email protected]", salary: 8000, department: { "name":"Finance" } }, { _id:3, firstName: "James", lastName: "Bond", gender:'male', email: "[email protected]", salary: 7500, department: { "name":"Marketing" } }, { _id:4, firstName: "Rosy", lastName: "Brown", gender:'female', email: "[email protected]", salary: 5000, department: { "name":"HR" } }, { _id:5, firstName: "Kapil", lastName: "D", gender:'male', email: "[email protected]", salary: 4500, department: { "name":"Finance" } }, { _id:6, firstName: "Amitabh", lastName: "B", gender:'male', email: "[email protected]", salary: 7000, department: { "name":"Marketing" } } ]) 7
Kerangka kerja agregasi memproses alur tahapan pada data pengumpulan dan memberi Anda keluaran dalam bentuk yang Anda butuhkan
Setiap tahap menerima keluaran dari tahap sebelumnya, memproses data lebih lanjut, dan mengirimkannya ke tahap berikutnya sebagai data masukan. Pipa agregasi yang dijalankan di server dapat memanfaatkan indeks. Lihat daftar tahapan
[email protected]", salary: 5000, department: { "name":"HR" } }, { _id:2, firstName: "Sachin", lastName: "T", gender:'male', email: "[email protected]", salary: 8000, department: { "name":"Finance" } }, { _id:3, firstName: "James", lastName: "Bond", gender:'male', email: "[email protected]", salary: 7500, department: { "name":"Marketing" } }, { _id:4, firstName: "Rosy", lastName: "Brown", gender:'female', email: "[email protected]", salary: 5000, department: { "name":"HR" } }, { _id:5, firstName: "Kapil", lastName: "D", gender:'male', email: "[email protected]", salary: 4500, department: { "name":"Finance" } }, { _id:6, firstName: "Amitabh", lastName: "B", gender:'male', email: "[email protected]", salary: 7000, department: { "name":"Marketing" } } ]) 8 berikutContoh data
db.employees.insertMany([ { _id:1, firstName: "John", lastName: "King", gender:'male', email: "[email protected]", salary: 5000, department: { "name":"HR" } }, { _id:2, firstName: "Sachin", lastName: "T", gender:'male', email: "[email protected]", salary: 8000, department: { "name":"Finance" } }, { _id:3, firstName: "James", lastName: "Bond", gender:'male', email: "[email protected]", salary: 7500, department: { "name":"Marketing" } }, { _id:4, firstName: "Rosy", lastName: "Brown", gender:'female', email: "[email protected]", salary: 5000, department: { "name":"HR" } }, { _id:5, firstName: "Kapil", lastName: "D", gender:'male', email: "[email protected]", salary: 4500, department: { "name":"Finance" } }, { _id:6, firstName: "Amitabh", lastName: "B", gender:'male', email: "[email protected]", salary: 7000, department: { "name":"Marketing" } } ])
Tahap $pertandingan
Tahap ________0______9 biasanya merupakan tahap pertama untuk memilih hanya dokumen yang cocok dari koleksi. Ini setara dengan metode Find(). Contoh berikut menunjukkan alur agregasi dengan satu tahap db.employees.insertMany([ { _id:1, firstName: "John", lastName: "King", gender:'male', email: "[email protected]", salary: 5000, department: { "name":"HR" } }, { _id:2, firstName: "Sachin", lastName: "T", gender:'male', email: "[email protected]", salary: 8000, department: { "name":"Finance" } }, { _id:3, firstName: "James", lastName: "Bond", gender:'male', email: "[email protected]", salary: 7500, department: { "name":"Marketing" } }, { _id:4, firstName: "Rosy", lastName: "Brown", gender:'female', email: "[email protected]", salary: 5000, department: { "name":"HR" } }, { _id:5, firstName: "Kapil", lastName: "D", gender:'male', email: "[email protected]", salary: 4500, department: { "name":"Finance" } }, { _id:6, firstName: "Amitabh", lastName: "B", gender:'male', email: "[email protected]", salary: 7000, department: { "name":"Marketing" } } ]) 9
Contoh. Tahap $pertandingan
Menyalindb.employees.aggregate([ {$match:{ gender: 'female'}} ])
Dalam contoh di atas, tahap db.employees.insertMany([ { _id:1, firstName: "John", lastName: "King", gender:'male', email: "[email protected]", salary: 5000, department: { "name":"HR" } }, { _id:2, firstName: "Sachin", lastName: "T", gender:'male', email: "[email protected]", salary: 8000, department: { "name":"Finance" } }, { _id:3, firstName: "James", lastName: "Bond", gender:'male', email: "[email protected]", salary: 7500, department: { "name":"Marketing" } }, { _id:4, firstName: "Rosy", lastName: "Brown", gender:'female', email: "[email protected]", salary: 5000, department: { "name":"HR" } }, { _id:5, firstName: "Kapil", lastName: "D", gender:'male', email: "[email protected]", salary: 4500, department: { "name":"Finance" } }, { _id:6, firstName: "Amitabh", lastName: "B", gender:'male', email: "[email protected]", salary: 7000, department: { "name":"Marketing" } } ]) _9 mengembalikan semua karyawan pria dan meneruskannya ke tahap berikutnya db.employees.aggregate([ { $group:{ _id:'$department.name'} } ]) 8. Ekspresi [ { _id: 'Marketing' }, { _id: 'HR' }, { _id: 'Finance' } ] _1 mengurutkan dokumen input dengan bidang [ { _id: 'Marketing' }, { _id: 'HR' }, { _id: 'Finance' } ] 2 dalam urutan menaik. 1 menunjukkan urutan menaik dan -1 menunjukkan urutan menurun