Bagikan melalui


Memulai dengan Pipeline Agregasi

Penting

Apakah Anda ingin memigrasikan aplikasi MongoDB yang sudah ada atau menggunakan fitur MongoDB Query Language (MQL)? Pertimbangkan Azure DocumentDB.

Apakah Anda mencari solusi database untuk skenario skala tinggi dengan perjanjian tingkat layanan ketersediaan (SLA) 99,999%, skala otomatis instan, dan failover otomatis di beberapa wilayah? Pertimbangkan Azure Cosmos DB untuk NoSQL.

Alur agregasi adalah alat canggih yang memungkinkan pengembang untuk melakukan analisis dan manipulasi data tingkat lanjut pada koleksi mereka. Alur adalah urutan operasi pemrosesan data, yang dilakukan pada dokumen input untuk menghasilkan output komputasi. Tahapan alur memproses dokumen input dan meneruskan hasilnya ke tahap berikutnya. Setiap tahap melakukan operasi tertentu pada data, seperti pemfilteran, pengelompokan, pengurutan, dan transformasi.

Sintaks dasar

Sintaks dasar untuk alur agregasi adalah sebagai berikut:

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

Di mana db.collection adalah koleksi MongoDB yang ingin Anda lakukan agregasinya, dan stage1, stage2, ..., stageN adalah tahap alur yang ingin Anda terapkan.

Tahapan Sampel

Cosmos DB for MongoDB menyediakan berbagai tahapan yang dapat Anda gunakan dalam alur Anda, termasuk:

  • $match: Memfilter dokumen untuk meneruskan hanya dokumen yang cocok dengan kondisi yang ditentukan.
  • $project: Mengubah dokumen ke formulir baru dengan menambahkan, menghapus, atau memperbarui bidang.
  • $group: Mengelompokkan dokumen menurut satu atau beberapa bidang dan melakukan berbagai fungsi agregat pada data yang dikelompokkan.
  • $sort: Mengurutkan dokumen berdasarkan bidang yang ditentukan.
  • $skip: Melewati jumlah dokumen yang ditentukan.
  • $limit: Membatasi jumlah dokumen yang diteruskan ke tahap berikutnya.
  • $unwind: Menganalisis bidang array pada dokumen input sehingga menghasilkan dokumen untuk tiap elemen.

Untuk melihat semua tahapan yang tersedia, lihat fitur yang didukung

Contoh

Berikut adalah beberapa contoh bagaimana Anda dapat menggunakan alur agregasi untuk melakukan berbagai operasi pada data Anda:

Pemfilteran: Untuk memfilter dokumen yang memiliki bidang "kuantitas" yang lebih besar dari 20, Anda bisa menggunakan alur berikut:

db.collection.aggregate([
    { $match: { quantity: { $gt: 20 } } }
])

Pengelompokan: Untuk mengelompokkan dokumen menurut bidang "kategori" dan menghitung total "kuantitas" untuk setiap grup, Anda bisa menggunakan alur berikut:

db.collection.aggregate([
    { $group: { _id: "$category", totalQuantity: { $sum: "$quantity" } } }
])

Pengurutan: Untuk mengurutkan dokumen menurut bidang "harga" dalam urutan menurun, Anda bisa menggunakan alur berikut:

db.collection.aggregate([
    { $sort: { price: -1 } }
])

Transformasi: Untuk menambahkan bidang baru "diskon" ke dokumen yang memiliki "harga" lebih besar dari 100, Anda dapat menggunakan alur berikut:

db.collection.aggregate([
    { $project: { item: 1, price: 1, discount: { $cond: [{ $gt: ["$price", 100] }, 10, 0 ] } } }
])

Pemecahan: Untuk memisahkan semua subdokumen dari bidang array 'tags' dan membuat dokumen baru untuk setiap nilai, Anda dapat menggunakan pipeline berikut:

db.collection.aggregate([
    { $unwind: "$tags" }
])

Contoh dengan beberapa tahap

db.sales.aggregate([
  { $match: { date: { $gte: "2021-01-01", $lt: "2021-03-01" } } },
  { $group: { _id: "$category", totalSales: { $sum: "$sales" } } },
  { $sort: { totalSales: -1 } },
  { $limit: 5 }
])

Dalam contoh ini, kita menggunakan koleksi sampel yang disebut "penjualan" yang memiliki dokumen dengan bidang berikut: "tanggal", "kategori", dan "penjualan".

Tahap pertama { $match: { date: { $gte: "2021-01-01", $lt: "2021-03-01" } } } memfilter dokumen berdasarkan bidang "tanggal", hanya meneruskan dokumen dengan tanggal antara 1 Januari 2021 dan 28 Februari 2021. Kami menggunakan format tanggal string dengan format "YYYY-MM-DD".

Tahap kedua { $group: { _id: "$category", totalSales: { $sum: "$sales" } } } mengelompokkan dokumen menurut bidang "kategori" dan menghitung total penjualan untuk setiap grup.

Tahap ketiga { $sort: { totalSales: -1 } } mengurutkan dokumen menurut bidang "totalSales" dalam urutan menurun.

Tahap keempat { $limit: 5 } membatasi jumlah dokumen yang diteruskan ke tahap berikutnya menjadi hanya 5 teratas.

Akibatnya, alur akan mengembalikan 5 kategori teratas dengan total penjualan untuk rentang tanggal yang ditentukan.

Langkah berikutnya