Możesz zaktualizować osadzony dokument „sprzedaż” w tablicy „act_mgr” za pomocą następującej instrukcji aktualizacji:
> 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"
}
]
}
>
Możesz dodać osadzony dokument zawierający informacje „dewelopera” do tablicy w następujący sposób:
> 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"
}
]
}
>
Dokumentację modyfikatorów $push i $set można znaleźć w dokumentacji „Updating”:http ://www.mongodb.org/display/DOCS/Aktualizacja
Więcej informacji na temat tworzenia i aktualizowania osadzonych dokumentów za pomocą Mongo db można znaleźć w dokumentacji zatytułowanej „Notacja punktowa (dot. obiektów)”http://www.mongodb.org/display/DOCS/Dot+Notation+%28Reaching+into+Objects%29
Informacje na temat aktualizacji osadzonych dokumentów za pomocą operatora pozycyjnego „$” można znaleźć w sekcji „Operator pozycyjny $” w dokumentacji „Aktualizacja”.
http://www.mongodb.org/display/DOCS/Updating#Updating-The%24positionaloperator
Słowo ostrzeżenia:Ogólnie rzecz biorąc, osadzone dokumenty mają tę samą strukturę, dzięki czemu można łatwiej odwoływać się do poszczególnych osadzonych dokumentów. Twoja tablica „sprzedaży” jest tego dobrym przykładem; każdy osadzony dokument zawiera te same klucze, „sno”, „message” i „status”
Jednak osadzone dokumenty w tablicy „act_mgr” zawierają różne klucze; pierwsza zawiera „sprzedaż”, a druga „deweloper”. Zamiast tego rozważ następującą strukturę:
"act_mgr" : [
{
"title" : "sales",
"agent" : [
"[email protected]",
"[email protected]"
],
"last_interacted" : "[email protected]"
},
{
"title": "developer",
"agent" : [
"[email protected]"
],
"last_interacted" : "[email protected]"
}
]
Teraz każdy osadzony dokument zawiera te same klucze, „tytuł”, „agent” i „last_interacted”.
Możesz zaktualizować dokumenty podrzędne za pomocą następującego polecenia.
> db.sales.update({"act_mgr.title":"sales"}, {$push:{"act_mgr.$.agent":"[email protected]"}, $set:{"act_mgr.$.last_interacted":"[email protected]"}})
Mam nadzieję, że pozwoli to na dokonanie niezbędnych aktualizacji i być może da ci trochę do myślenia na temat projektu schematu. Powodzenia!