Du kan opdatere det indlejrede "salgs"-dokument inde i "act_mgr"-arrayet med følgende opdateringssætning:
> 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"
}
]
}
>
Du kan tilføje det indlejrede dokument, der indeholder "udvikler"-oplysningerne til arrayet på følgende måde:
> 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"
}
]
}
>
Dokumentationen om $push- og $set-modifikatorerne kan findes i "Opdatering"-dokumentationen:http ://www.mongodb.org/display/DOCS/Updating
Flere oplysninger om oprettelse og opdatering af indlejrede dokumenter med Mongo db kan findes i dokumentationen med titlen "Dot Notation (Reaching into Objects)"http://www.mongodb.org/display/DOCS/Dot+Notation+%28Reaching+into+Objects%29
Oplysninger om opdatering af indlejrede dokumenter ved hjælp af positionsoperatoren "$" kan findes i afsnittet "The $ positional operator" i dokumentationen "Opdaterer".
http://www.mongodb.org/display/DOCS/Updating#Updating-The%24positionaloperator
En advarsel:Det er generelt mere almindeligt, at indlejrede dokumenter alle matcher den samme struktur, så individuelle indlejrede dokumenter lettere kan refereres. Dit "salgs"-array er et godt eksempel på dette; hvert indlejret dokument indeholder de samme nøgler, "sno", "besked" og "status"
De indlejrede dokumenter i dit "act_mgr"-array indeholder dog forskellige nøgler; den første indeholder "salg", og den anden indeholder "udvikler". I stedet kan du måske overveje følgende struktur:
"act_mgr" : [
{
"title" : "sales",
"agent" : [
"[email protected]",
"[email protected]"
],
"last_interacted" : "[email protected]"
},
{
"title": "developer",
"agent" : [
"[email protected]"
],
"last_interacted" : "[email protected]"
}
]
Nu indeholder hvert indlejrede dokument de samme nøgler, "title", "agent" og "last_interacted".
Du kan opdatere underdokumenter med følgende kommando.
> db.sales.update({"act_mgr.title":"sales"}, {$push:{"act_mgr.$.agent":"[email protected]"}, $set:{"act_mgr.$.last_interacted":"[email protected]"}})
Forhåbentlig vil dette give dig mulighed for at lave de opdateringer, du har brug for, og måske give dig lidt stof til eftertanke angående skemadesign. Held og lykke!