OPの質問と例が一致しません。彼は実際には、ドキュメント内の配列にフィールドを挿入したいと考えています。つまり、
db.posts.update({name: "Hello, world!" }, { $push: {comments: "First comment!"}});
うまく動作します。
ただし、辞書に値またはサブドキュメントを追加する場合は、$set
コマンドを使用します。このドキュメントを例として取り上げます。
{
"_id": {
"$oid": "538420b2862a656e9e99fc93"
},
"name": "Farmer John",
"items": {
"peaches": 5,
"bananas": 10
}
}
"apples": 2
アイテムに追加したいとしましょう。コマンドは次のようになります
db.collection.update({"name": "Farmer John"},
{"$set": {"items.apples": 2}});
ドキュメントは次のようになります。
{
"_id": {
"$oid": "538420b2862a656e9e99fc93"
},
"name": "Farmer John",
"items": {
"peaches": 5,
"bananas": 10,
"apples: 2
}
}
これはサブドキュメントの挿入でも機能するため、元の例を変更できることに注意してください。
{
"_id": {
"$oid": "538420b2862a656e9e99fc93"
},
"name": "Farmer John",
"items": {
"peaches": {
"yellow": 5,
"white": 3
}
}
}
そして、グラニースミスりんご4個とふじりんご8個を入れましょう。
db.collection.update({"name": "Farmer John"},
{"$set": {"items.apples": {"fuji": 8, "granny smith": 4}}});
ドキュメントは次のようになります。
{
"_id": {
"$oid": "538420b2862a656e9e99fc93"
},
"name": "Farmer John",
"items": {
"peaches": {
"yellow": 5,
"white": 3
},
"apples": {
"fuji": 8,
"granny smith": 4
}
}
}
最後のコメント: サブドキュメントまたはフィールドが既に存在する場合は、$set
コマンドによって上書きされることに注意してください。