Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Tahap $unwind dalam kerangka kerja agregasi digunakan untuk mendekonstruksi bidang array dari dokumen input untuk menghasilkan dokumen untuk setiap elemen. Setiap dokumen output adalah salinan asli tetapi dengan nilai bidang array digantikan oleh satu elemen. Ini sangat berguna untuk menormalkan data yang disimpan dalam array dan untuk melakukan operasi pada setiap elemen array secara terpisah.
Sintaksis
{
$unwind: {
path: <field path>,
includeArrayIndex: <string>, // Optional
preserveNullAndEmptyArrays: <boolean> // Optional
}
}
Parameter-parameternya
Deskripsi | |
---|---|
path |
Jalur bidang ke bidang array. Ini adalah parameter yang diperlukan. |
includeArrayIndex |
Fakultatif. Nama bidang baru untuk menyimpan indeks array dari elemen unwound. |
preserveNullAndEmptyArrays |
Fakultatif. Jika true, jika jalur null, hilang, atau array kosong, $unwind menghasilkan dokumen tidak berubah. |
Contoh
Contoh 1: Lepaskan Penjualan menurut Kategori
Untuk mendekonstruksi array salesByCategory di dokumen penyimpanan:
db.stores.aggregate([
{
$unwind: "$store.sales.salesByCategory"
}
])
Contoh keluaran
[
{
"_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
"store": {
"name": "Downtown Store",
"sales": {
"totalSales": 15000,
"salesByCategory": {
"category": "Electronics",
"totalSales": 5000
}
}
}
},
{
"_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
"store": {
"name": "Downtown Store",
"sales": {
"totalSales": 15000,
"salesByCategory": {
"category": "Clothing",
"totalSales": 10000
}
}
}
}
]
Ini akan menghasilkan dokumen di mana setiap dokumen mewakili informasi penjualan satu kategori.
Contoh 2: Lepaskan Peristiwa Promosi dengan Indeks Array
Untuk mendekonstruksi array promotionEvents dan menyertakan indeks array dalam output:
db.stores.aggregate([
{
$unwind: {
path: "$store.promotionEvents",
includeArrayIndex: "eventIndex"
}
}
])
Contoh keluaran
[
{
"_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
"store": {
"name": "Downtown Store",
"promotionEvents": {
"eventName": "Summer Sale",
"eventDate": ISODate("2024-08-01T00:00:00Z")
},
"eventIndex": 0
}
},
{
"_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
"store": {
"name": "Downtown Store",
"promotionEvents": {
"eventName": "Black Friday",
"eventDate": ISODate("2024-11-25T00:00:00Z")
},
"eventIndex": 1
}
}
]
Ini akan menghasilkan dokumen di mana setiap dokumen mewakili satu peristiwa promosi, dan bidang eventIndex akan berisi indeks asli peristiwa dalam array.
Contoh 3: Melepas Diskon dalam Acara Promosi
Untuk mendekonstruksi array diskon dalam setiap acara promosi dan mempertahankan dokumen tanpa diskon:
db.stores.aggregate([
{
$unwind: {
path: "$store.promotionEvents.discounts",
preserveNullAndEmptyArrays: true
}
}
])
Contoh keluaran
[
{
"_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
"store": {
"name": "Downtown Store",
"promotionEvents": {
"eventName": "Summer Sale",
"discounts": {
"discountType": "Percentage",
"discountAmount": 20
}
}
}
},
{
"_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
"store": {
"name": "Downtown Store",
"promotionEvents": {
"eventName": "Black Friday"
}
}
}
]
Ini akan menghasilkan dokumen di mana setiap dokumen mewakili satu diskon dalam acara promosi, dan dokumen tanpa diskon akan dipertahankan.
Konten terkait
- Meninjau opsi untuk bermigrasi dari MongoDB ke Azure Cosmos DB for MongoDB (vCore)
- Mulailah dengan membuat akun.