Saya ingin menggabungkan metadata berdasarkan "app_key" dengan menggunakan agregasi dan hasil yang diharapkan harus seperti ini
{ resource: { name: "PROJ01", version: 1, owner: "" }, appInfos: [ { app_key: "APP01", size: 20mb, metadata:[{ deployOn: "aws", status: "running", reason:{} }, { deployOn: "azure", status: "failed", reason:{ message: "Connectivity Issue", errorCode: "CONNECTIVITY_ERROR" } } ]}, { app_key: "APP02", size: 20mb, metadata:[{ deployOn: "aws", status: "running", reason:{} }, { deployOn: "azure", status: "failed", reason:{ message: "Connectivity Issue", errorCode: "CONNECTIVITY_ERROR" } } ]} }Array dua elemen dengan elemen pertama adalah nama bidang, dan elemen kedua adalah nilai bidang
[ [ [ "item", "abc123" ], [ "qty", 25 ] ] ]_
- ATAU -
Larik dokumen yang berisi dua bidang, [ [ { "k": "item", "v": "abc123" }, { "k": "qty", "v": 25 } ] ]6 dan [ [ { "k": "item", "v": "abc123" }, { "k": "qty", "v": 25 } ] ]7 di mana
Bidang [ [ { "k": "item", "v": "abc123" }, { "k": "qty", "v": 25 } ] ]_6 berisi nama bidang
Bidang [ [ { "k": "item", "v": "abc123" }, { "k": "qty", "v": 25 } ] ]_7 berisi nilai bidang
[ [ { "k": "item", "v": "abc123" }, { "k": "qty", "v": 25 } ] ]
{ $arrayToObject: <expression> }
{ $arrayToObject: <expression> }1 dapat berupa valid apa saja yang menyelesaikan ke array array dua elemen atau array dokumen yang berisi bidang "k" dan "v"
Untuk informasi lebih lanjut tentang ekspresi, lihat
Perilaku
Jika nama bidang berulang dalam larik,
Mulai tahun 4. 0. 5, menggunakan nilai terakhir untuk bidang tersebut. Untuk 4. 0. 0-4. 0. 4, nilai yang digunakan tergantung pada driver
Mulai tahun 3. 6. 10, menggunakan nilai terakhir untuk bidang tersebut. Untuk 3. 6. 0-3. 6. 9, nilai yang digunakan tergantung pada driver
Mulai tahun 3. 4. 19, menggunakan nilai terakhir untuk bidang tersebut. Untuk 3. 4. 0-3. 4. 19, nilai yang digunakan tergantung pada driver
Contoh
Hasil
{ $arrayToObject: [ [ { "k": "item", "v": "abc123" }, { "k": "qty", "v": "$qty" } ]] }_
Diberikan dokumen dengan bidang { $arrayToObject: <expression> }_5 dan nilai { $arrayToObject: <expression> }6, mengembalikan
{ "item" : "abc123", "qty" : 25 }
{ $arrayToObject: { $literal: [ [ "item", "abc123" ], [ "qty", 25 ]] } }
{ "item" : "abc123", "qty" : 25 }
{ $arrayToObject: { $literal: [ { "k": "item", "v": "123abc" }, { "k": "item", "v": "abc123" }] } }
{ "item" : "abc123" } Mulai dari versi 4. 0. 5+ (3. 6. 10+ dan 3. 4. 19+), jika nama bidang berulang dalam larik, gunakan nilai terakhir untuk bidang tersebut
Contoh
[ [ { "k": "item", "v": "abc123" }, { "k": "qty", "v": 25 } ] ]5 Contoh
Pertimbangkan koleksi { $arrayToObject: [ [ { "k": "item", "v": "abc123" }, { "k": "qty", "v": "$qty" } ]] }_0 dengan dokumen-dokumen berikut
{ "_id" : 1, "item" : "ABC1", dimensions: [ { "k": "l", "v": 25} , { "k": "w", "v": 10 }, { "k": "uom", "v": "cm" } ] }{ "_id" : 2, "item" : "ABC2", dimensions: [ [ "l", 50 ], [ "w", 25 ], [ "uom", "cm" ] ] }{ "_id" : 3, "item" : "ABC3", dimensions: [ [ "l", 25 ], [ "l", "cm" ], [ "l", 50 ] ] }
Operasi pipa agregasi berikut menghitung total stok untuk setiap item dan menambahkan ke dokumen { $arrayToObject: [ [ { "k": "item", "v": "abc123" }, { "k": "qty", "v": "$qty" } ]] }7