Om alle mogelijke gevallen hier uit te leggen, bekijkt u elk documentgeval:
Als uw te wijzigen document er als volgt uitziet:
{
"_id": "efgh",
"name": "Jerry"
}
Dan een update-verklaring als deze:
db.collection.update(
{ "_id": "efgh" },
{ "$push": { "myArray": { "field1": "abc", "field2": "def" } } }
)
Resultaten in dit:
{
"_id": "efgh",
"name": "Jerry",
"myArray": [
{
"field1": "abc",
"field2": "def"
}
]
}
Dus de array wordt gemaakt en het nieuwe item wordt toegevoegd.
Als uw document al zo'n array heeft:
{
"_id": "abcd",
"name": "Tom",
"myArray": [
{
"field1": "",
"field2": ""
}
]
}
En je doet in principe dezelfde uitspraak:
db.collection.update(
{ "_id": "abcd" },
{ "$push": { "myArray": { "field1": "abc", "field2": "def" } } }
)
Vervolgens wordt de nieuwe documentinhoud toegevoegd aan de bestaande array:
{
"_id": "abcd",
"name": "Tom",
"myArray": [
{
"field1": "",
"field2": ""
},
{
"field1": "abc",
"field2": "def"
}
]
}
Als uw originele document echter het genoemde veld heeft, maar het is geen array, zoals dit:
{
"_id": "efgh",
"name": "Jerry",
"myArray": 123
}
Zorg er vervolgens voor dat het geen array is door te testen in de queryvoorwaarde en te gebruiken $set
in plaats daarvan:
db.collection.update(
{ "_id": "efgh", "myArray.0": { "$exists": false } },
{ "$set": { "myArray": [{ "field1": "abc", "field2": "def" }] } }
)
Dat zal het element dat geen array is (puntnotatie "myArray.0" betekent eerste array-element, wat niet waar is) veilig overschrijven met een nieuwe array die uw inhoud bevat. Het resultaat is hetzelfde als het origineel:
{
"_id": "efgh",
"name": "Jerry",
"myArray": [
{
"field1": "abc",
"field2": "def"
}
]
}