Untuk menjelaskan semua kemungkinan kasus di sini, pertimbangkan setiap kasus dokumen:
Jika dokumen Anda untuk diubah terlihat seperti ini:
{
"_id": "efgh",
"name": "Jerry"
}
Kemudian update statment seperti ini:
db.collection.update(
{ "_id": "efgh" },
{ "$push": { "myArray": { "field1": "abc", "field2": "def" } } }
)
Hasil dalam ini:
{
"_id": "efgh",
"name": "Jerry",
"myArray": [
{
"field1": "abc",
"field2": "def"
}
]
}
Jadi array dibuat dan item baru ditambahkan.
Jika dokumen Anda sudah memiliki array seperti ini:
{
"_id": "abcd",
"name": "Tom",
"myArray": [
{
"field1": "",
"field2": ""
}
]
}
Dan pada dasarnya Anda melakukan pernyataan yang sama:
db.collection.update(
{ "_id": "abcd" },
{ "$push": { "myArray": { "field1": "abc", "field2": "def" } } }
)
Kemudian konten dokumen baru ditambahkan ke larik yang ada:
{
"_id": "abcd",
"name": "Tom",
"myArray": [
{
"field1": "",
"field2": ""
},
{
"field1": "abc",
"field2": "def"
}
]
}
Namun jika dokumen asli Anda memiliki bidang bernama tetapi bukan array, seperti ini:
{
"_id": "efgh",
"name": "Jerry",
"myArray": 123
}
Kemudian pastikan itu bukan array dengan menguji dalam kondisi kueri dan menggunakan $set
sebagai gantinya:
db.collection.update(
{ "_id": "efgh", "myArray.0": { "$exists": false } },
{ "$set": { "myArray": [{ "field1": "abc", "field2": "def" }] } }
)
Itu akan dengan aman menimpa elemen yang bukan array ( notasi titik "myArray.0" berarti elemen array pertama, yang tidak benar ) dengan array baru yang berisi konten Anda. Hasilnya sama dengan aslinya:
{
"_id": "efgh",
"name": "Jerry",
"myArray": [
{
"field1": "abc",
"field2": "def"
}
]
}