Можете да актуализирате вградения документ „продажби“ вътре в масива „act_mgr“ със следния оператор за актуализиране:
> 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"
}
]
}
>
Можете да добавите вградения документ, съдържащ информацията за „разработчик“, към масива по следния начин:
> 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"
}
]
}
>
Документацията за модификаторите $push и $set може да бъде намерена в документацията за „Актуализиране“:http ://www.mongodb.org/display/DOCS/Updating
Повече информация относно създаването и актуализирането на вградени документи с Mongo db може да бъде намерена в документацията, озаглавена „Dot Notation (Reaching into Objects)“http://www.mongodb.org/display/DOCS/Dot+Notation+%28Reaching+into+Objects%29
Информация за актуализиране на вградени документи с помощта на позиционния оператор "$" може да бъде намерена в раздела "Позиционният оператор $" на документацията "Актуализиране".
http://www.mongodb.org/display/DOCS/Updating#Updating-The%24positionaloperator
Внимание:обикновено е по-често всички вградени документи да съответстват на една и съща структура, така че отделните вградени документи да могат да бъдат препращани по-лесно. Вашият масив "продажби" е добър пример за това; всеки вграден документ съдържа едни и същи ключове, "sno", "message" и "status"
Въпреки това, вградените документи във вашия масив "act_mgr" съдържат различни ключове; първият съдържа "продажби", а вторият съдържа "разработчик". Вместо това може би помислете за следната структура:
"act_mgr" : [
{
"title" : "sales",
"agent" : [
"[email protected]",
"[email protected]"
],
"last_interacted" : "[email protected]"
},
{
"title": "developer",
"agent" : [
"[email protected]"
],
"last_interacted" : "[email protected]"
}
]
Сега всеки вграден документ съдържа едни и същи ключове „title“, „agent“ и „last_interacted“.
Можете да актуализирате поддокументи със следната команда.
> db.sales.update({"act_mgr.title":"sales"}, {$push:{"act_mgr.$.agent":"[email protected]"}, $set:{"act_mgr.$.last_interacted":"[email protected]"}})
Надяваме се, че това ще ви позволи да направите актуализациите, от които се нуждаете, и може би ще ви даде храна за размисъл относно дизайна на схемата. Успех!