Kapan saya harus menggunakan agregasi di mongodb?

Pipa agregasi dapat memiliki satu atau lebih "tahapan". Urutan tahapan ini penting. Setiap tahap bertindak berdasarkan hasil dari tahap sebelumnya

Contoh

db.posts.aggregate([
  // Stage 1: Only find documents that have more than 1 like
  {
    $match: { likes: { $gt: 1 } }
  },
  // Stage 2: Group documents by category and sum each categories likes
  {
    $group: { _id: "$category", totalLikes: { $sum: "$likes" } }
  }
])
Coba Sendiri »


Contoh data

Untuk mendemonstrasikan penggunaan tahapan dalam pipa agregasi, kami akan memuat data sampel ke dalam basis data kami

Dari dasbor MongoDB Atlas, buka Database. Klik elipsis dan pilih "Load Sample Dataset". Ini akan memuat beberapa kumpulan data sampel ke dalam basis data Anda

Pada bagian selanjutnya kita akan mengeksplorasi beberapa tahapan pipeline agregasi secara lebih rinci menggunakan data sampel ini

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

  1. Menggunakan Pipa Agregasi
  2. 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

db.collection.aggregate([ {stage1}, {stage2}, {stage3}...])

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

Kapan saya harus menggunakan agregasi di mongodb?

Mari kita lihat bagaimana menggunakan tahapan yang berbeda pada koleksi

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" 
                }
    }
])
8 berikut

Contoh data

Salinan

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

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 biasanya merupakan tahap pertama untuk memilih hanya dokumen yang cocok dari koleksi. Ini setara dengan metode Find(). Contoh berikut menunjukkan alur agregasi dengan satu tahapan
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

Salinan

db.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

Di mana kerangka kerja agregasi MongoDB berguna?

Agregasi dalam MongoDB memungkinkan transformasi data dan hasil dengan cara yang lebih kuat daripada menggunakan perintah find() . Melalui penggunaan beberapa tahapan dan ekspresi, Anda dapat membangun "pipa" operasi pada data Anda untuk melakukan operasi analitik.

Apakah MongoDB bagus untuk agregasi?

Seperti banyak sistem database lainnya, MongoDB memungkinkan Anda melakukan berbagai operasi agregasi . Ini memungkinkan Anda untuk memproses rekaman data dalam berbagai cara, seperti mengelompokkan data, mengurutkan data ke dalam urutan tertentu, atau menyusun ulang dokumen yang dikembalikan, serta memfilter data dengan kueri.

Apa tujuan dari pipa agregasi di MongoDB?

Apa yang dimaksud dengan Agregation Pipeline di MongoDB? . Dalam sebuah pipeline, operasi yang berurutan diinformasikan oleh hasil sebelumnya. Dalam contoh di atas, input mengacu pada satu atau lebih dokumen. a specific flow of operations that processes, transforms, and returns results. In a pipeline, successive operations are informed by the previous result. In the above example, input refers to one or more documents.

Apakah agregasi cepat di MongoDB?

Pada kumpulan besar jutaan dokumen, Agregasi MongoDB terbukti jauh lebih buruk daripada Elasticsearch . Performa memburuk dengan ukuran koleksi saat MongoDB mulai menggunakan disk karena RAM sistem yang terbatas. Tahap $lookup yang digunakan tanpa indeks bisa sangat lambat.