Agregat mongodb menambahkan bidang ke array objek

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 } ] ]

memiliki sintaks berikut

{ $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

Bagaimana cara menambahkan bidang ke array dalam agregasi MongoDB?

Anda dapat menyertakan satu atau beberapa tahapan $addFields dalam operasi agregasi. Untuk menambahkan bidang atau bidang ke dokumen tersemat (termasuk dokumen dalam array) gunakan notasi titik . Lihat contoh. Untuk menambahkan elemen ke bidang larik yang ada dengan $addFields , gunakan dengan $concatArrays.

Bagaimana cara menambahkan banyak objek dalam array di MongoDB?

Tambahkan Banyak Nilai ke Array . Use $push with the $each modifier to append multiple values to the array field.

Bagaimana cara menambahkan objek ke array di MongoDB?

Dalam MongoDB, operator $push digunakan untuk menambahkan nilai tertentu ke array. Jika bidang yang disebutkan tidak ada dalam dokumen yang akan diperbarui, operator $push menambahkannya sebagai bidang baru dan menyertakan nilai yang disebutkan sebagai elemennya. Jika bidang pemutakhiran bukan bidang jenis larik, operasi gagal.

Apa perbedaan antara $SET dan $Addfield?

$set mengeluarkan dokumen yang berisi semua bidang yang ada dari dokumen masukan dan bidang yang baru ditambahkan . Tahap $set adalah alias untuk $addFields. Kedua tahapan setara dengan tahap $project yang secara eksplisit menentukan semua bidang yang ada dalam dokumen masukan dan menambahkan bidang baru.