За да обясните всички възможни случаи тук, разгледайте всеки документ:
Ако вашият документ за промяна изглежда така:
{
"_id": "efgh",
"name": "Jerry"
}
След това изявление за актуализиране като това:
db.collection.update(
{ "_id": "efgh" },
{ "$push": { "myArray": { "field1": "abc", "field2": "def" } } }
)
Резултатът е следният:
{
"_id": "efgh",
"name": "Jerry",
"myArray": [
{
"field1": "abc",
"field2": "def"
}
]
}
Така че масивът е създаден и новият елемент е добавен.
Ако вашият документ вече има масив като този:
{
"_id": "abcd",
"name": "Tom",
"myArray": [
{
"field1": "",
"field2": ""
}
]
}
И правите основно същото твърдение:
db.collection.update(
{ "_id": "abcd" },
{ "$push": { "myArray": { "field1": "abc", "field2": "def" } } }
)
След това новото съдържание на документа се добавя към съществуващия масив:
{
"_id": "abcd",
"name": "Tom",
"myArray": [
{
"field1": "",
"field2": ""
},
{
"field1": "abc",
"field2": "def"
}
]
}
Ако обаче вашият оригинален документ има именуваното поле, но не е масив, като това:
{
"_id": "efgh",
"name": "Jerry",
"myArray": 123
}
След това се уверете, че не е масив, като тествате в условието за заявка и използвате $set
вместо това:
db.collection.update(
{ "_id": "efgh", "myArray.0": { "$exists": false } },
{ "$set": { "myArray": [{ "field1": "abc", "field2": "def" }] } }
)
Това безопасно ще презапише елемента, който не е масив (нотация с точка "myArray.0" означава първи елемент от масив, което не е вярно) с нов масив, съдържащ вашето съдържание. Резултатът е същият като оригинала:
{
"_id": "efgh",
"name": "Jerry",
"myArray": [
{
"field1": "abc",
"field2": "def"
}
]
}