Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
$facet
Baru dari versi 8.0.2.
T $facet ahap agregasi di Amazon DocumentDB memproses beberapa pipeline agregasi dalam satu tahap pada kumpulan dokumen input yang sama. Setiap bidang keluaran mendefinisikan pipelnya sendiri, dan setiap pipeline menerima dokumen input yang sama. Ini memungkinkan Anda menghitung beberapa agregasi independen, seperti jumlah, pengelompokan, dan statistik ringkasan, dalam satu kueri alih-alih menjalankan koleksi melalui beberapa kueri terpisah.
Setiap sub-pipeline berjalan secara independen dan menghasilkan array dokumen yang disimpan di bidang output yang sesuai. Karena sub-pipeline tidak berbagi status, output dari satu pipa tidak mempengaruhi yang lain.
Sintaksis
{ $facet: { <outputField1>: [ <stage1>, <stage2>, ... ], <outputField2>: [ <stage1>, <stage2>, ... ], ... } }
Parameter
-
outputField(wajib): Nama bidang keluaran yang menyimpan array hasil dari pipeline agregasi terkait. Anda dapat menentukan satu atau lebih bidang keluaran. Setiap bidang keluaran memetakan ke array tahapan pipa agregasi yang diterapkan ke dokumen input.
Keluaran
T $facet ahap mengembalikan satu dokumen. Setiap bidang keluaran yang Anda tentukan berisi array dokumen yang dihasilkan oleh sub-pipeline yang sesuai.
Batasan
-
$facetSub-pipeline tidak dapat menyertakan tahapan berikut:$changeStream$collStats,,$facet(bersarang tidak diperbolehkan)$geoNear,$indexStats,$listSearchIndexes,$merge,$out,$planCacheStats,,$search$searchMeta, dan$vectorSearch. -
Dokumen yang dikem
$facetbalikan tahap harus tetap dalam batas ukuran dokumen BSON 16 MB. -
T
$sortahap yang datang sebelum$facettahap tidak dapat menentukan urutan akumulator peka urutan ($first,$last,$push,$firstN,$lastN, atau$mergeObjects) dalam$bucketAutotahap$group,$bucket, atau ketika urutan itu harus diterapkan melintasi batas.$facetIni berlaku apakah tahap pengelompokan berada di dalam$facetsub-pipeline atau setelah$facettahap. Dalam hal ini, Amazon DocumentDB mengembalikan kesalahan alih-alih menjalankan pipeline. Untuk memesan akumulator seperti itu, letakkan pang$sortgung di dalam$facetsub-pipa, segera sebelum tahap pengelompokan. Order-insensitive akumulator, seperti$sum,,$min, dan$max$count, tidak terpengaruh.
Contoh (MongoDB Shell)
Contoh berikut menunjukkan bagaimana menggunakan $facet tahap untuk menghitung beberapa agregasi atas data penjualan yang sama dalam satu kueri.
Buat dokumen sampel
db.sales.insertMany([ { item: "abc", price: 10, quantity: 2, date: new Date("2020-09-01") }, { item: "def", price: 20, quantity: 1, date: new Date("2020-10-01") }, { item: "ghi", price: 5, quantity: 3, date: new Date("2020-11-01") }, { item: "jkl", price: 15, quantity: 2, date: new Date("2020-12-01") }, { item: "abc", price: 25, quantity: 1, date: new Date("2021-01-01") } ]);
Contoh kueri
Perintah berikut digunakan $facet untuk menghitung, dalam satu tahap, jumlah total yang terjual per item, statistik harga keseluruhan, dan jumlah dokumen total:
db.sales.aggregate([ { $facet: { "totalByItem": [ { $group: { _id: "$item", totalQuantity: { $sum: "$quantity" } } } ], "priceStats": [ { $group: { _id: null, avgPrice: { $avg: "$price" }, maxPrice: { $max: "$price" } } } ], "documentCount": [ { $count: "total" } ] } } ])
Keluaran
Perintah mengembalikan output berikut:
[
{
totalByItem: [
{ _id: "abc", totalQuantity: 3 },
{ _id: "def", totalQuantity: 1 },
{ _id: "ghi", totalQuantity: 3 },
{ _id: "jkl", totalQuantity: 2 }
],
priceStats: [
{ _id: null, avgPrice: 15, maxPrice: 25 }
],
documentCount: [
{ total: 5 }
]
}
]
Contoh kode
Untuk melihat contoh kode untuk menggunakan $facet perintah, pilih tab untuk bahasa yang ingin Anda gunakan: