Vložený dokument „prodej“ v poli „act_mgr“ můžete aktualizovat pomocí následujícího prohlášení o aktualizaci:
> db.sales.update({"act_mgr.sales.last_interacted":"[email protected]"}, {$push:{"act_mgr.$.sales.agent":"[email protected]"}, $set:{"act_mgr.$.sales.last_interacted":"[email protected]"}})
> db.sales.find().pretty()
{
"_id" : ObjectId("4f855061dd53351011000b42"),
"act_mgr" : [
{
"sales" : {
"agent" : [
"[email protected]",
"[email protected]"
],
"last_interacted" : "[email protected]"
}
}
],
"email" : "[email protected]",
"name" : "Aman",
"sales" : [
{
"sno" : 1,
"message" : "description",
"status" : "open"
},
{
"sno" : 12,
"message" : "assad",
"status" : "open"
}
]
}
>
Vložený dokument obsahující informace o "vývojáři" můžete přidat do pole takto:
> db.sales.update({"_id" : ObjectId("4f855061dd53351011000b42")}, {$push:{"act_mgr":{ "developer" : {"agent" : ["[email protected]" ], "last_interacted" : "[email protected]" } }}})
> db.sales.find().pretty()
{
"_id" : ObjectId("4f855061dd53351011000b42"),
"act_mgr" : [
{
"sales" : {
"agent" : [
"[email protected]",
"[email protected]"
],
"last_interacted" : "[email protected]"
}
},
{
"developer" : {
"agent" : [
"[email protected]"
],
"last_interacted" : "[email protected]"
}
}
],
"email" : "[email protected]",
"name" : "Aman",
"sales" : [
{
"sno" : 1,
"message" : "description",
"status" : "open"
},
{
"sno" : 12,
"message" : "assad",
"status" : "open"
}
]
}
>
Dokumentaci k modifikátorům $push a $set lze nalézt v dokumentaci „Updating“:http ://www.mongodb.org/display/DOCS/Updating
Další informace o vytváření a aktualizaci vložených dokumentů pomocí Mongo db lze nalézt v dokumentaci s názvem "Dot Notation (Reaching into Objects)"http://www.mongodb.org/display/DOCS/Dot+Notation+%28Reaching+into+Objects%29
Informace o aktualizaci vložených dokumentů pomocí pozičního operátoru "$" lze nalézt v sekci "Poziční operátor $" v dokumentaci "Aktualizace".
http://www.mongodb.org/display/DOCS/Updating#Updating-The%24positionaloperator
Upozornění:Obecně je běžnější, aby všechny vložené dokumenty odpovídaly stejné struktuře, takže na jednotlivé vložené dokumenty lze snadněji odkazovat. Vaše pole „prodej“ je toho dobrým příkladem; každý vložený dokument obsahuje stejné klíče, „sno“, „zpráva“ a „stav“
Vložené dokumenty uvnitř pole "act_mgr" však obsahují různé klíče; první obsahuje „prodej“ a druhý obsahuje „vývojář“. Místo toho možná zvažte následující strukturu:
"act_mgr" : [
{
"title" : "sales",
"agent" : [
"[email protected]",
"[email protected]"
],
"last_interacted" : "[email protected]"
},
{
"title": "developer",
"agent" : [
"[email protected]"
],
"last_interacted" : "[email protected]"
}
]
Nyní každý vložený dokument obsahuje stejné klíče, „title“, „agent“ a „last_interacted“.
Vnořené dokumenty můžete aktualizovat pomocí následujícího příkazu.
> db.sales.update({"act_mgr.title":"sales"}, {$push:{"act_mgr.$.agent":"[email protected]"}, $set:{"act_mgr.$.last_interacted":"[email protected]"}})
Doufejme, že vám to umožní provádět aktualizace, které potřebujete, a možná vám to dá podnět k zamyšlení ohledně návrhu schématu. Hodně štěstí!