Chcete-li zde vysvětlit všechny možné případy, zvažte každý případ dokumentu:
Pokud váš dokument, který chcete změnit, vypadá takto:
{
"_id": "efgh",
"name": "Jerry"
}
Pak aktualizujte prohlášení, jako je toto:
db.collection.update(
{ "_id": "efgh" },
{ "$push": { "myArray": { "field1": "abc", "field2": "def" } } }
)
Výsledky v tomto:
{
"_id": "efgh",
"name": "Jerry",
"myArray": [
{
"field1": "abc",
"field2": "def"
}
]
}
Pole je tedy vytvořeno a nová položka připojena.
Pokud váš dokument již má takové pole:
{
"_id": "abcd",
"name": "Tom",
"myArray": [
{
"field1": "",
"field2": ""
}
]
}
A uděláte v podstatě totéž:
db.collection.update(
{ "_id": "abcd" },
{ "$push": { "myArray": { "field1": "abc", "field2": "def" } } }
)
Poté se obsah nového dokumentu připojí k existujícímu poli:
{
"_id": "abcd",
"name": "Tom",
"myArray": [
{
"field1": "",
"field2": ""
},
{
"field1": "abc",
"field2": "def"
}
]
}
Pokud však váš původní dokument má pojmenované pole, ale není to pole, jako je toto:
{
"_id": "efgh",
"name": "Jerry",
"myArray": 123
}
Poté se ujistěte, že se nejedná o pole testováním v podmínkách dotazu a pomocí $set
místo toho:
db.collection.update(
{ "_id": "efgh", "myArray.0": { "$exists": false } },
{ "$set": { "myArray": [{ "field1": "abc", "field2": "def" }] } }
)
To bezpečně přepíše prvek, který není polem (tečková notace "myArray.0" znamená první prvek pole, což není pravda) novým polem obsahujícím váš obsah. Výsledek je stejný jako originál:
{
"_id": "efgh",
"name": "Jerry",
"myArray": [
{
"field1": "abc",
"field2": "def"
}
]
}