次の更新ステートメントを使用して、「act_mgr」配列内に埋め込まれた「sales」ドキュメントを更新できます。
> 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を使用した埋め込みドキュメントの作成と更新の詳細については、「ドット表記(オブジェクトに到達)」というタイトルのドキュメントを参照してください。 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」配列内に埋め込まれたドキュメントには異なるキーが含まれています。 1つ目は「販売」を含み、2つ目は「開発者」を含みます。代わりに、次の構造を検討してください。
"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]"}})
うまくいけば、これにより、必要な更新を行うことができ、スキーマ設計に関する思考の糧が得られるでしょう。頑張ってください!