符號$
僅修改搜索最後一個數組的最後位置,並且可以使用$addToSet
或$push
用於新增項目
> db.resource.find()
{ "_id" : 1,
"resources" : [
{ "resource_id" : 1,
"resource_list" : [ "item1","item2" ] },
{ "resource_id" : 2,
"resource_list" : [ "item4", "item3" ] } ] }
> db.resource.update({"resources.resource_id": 2,
"resources.resource_list": "item4"},
{$addToSet:{"resources.$.resource_list": "item5"}})
> db.resource.find()
{ "_id" : 1, "resources" : [
{ "resource_id" : 1,
"resource_list" : [ "item1", "item2" ] },
{ "resource_id" : 2,
"resource_list" : [ "item4", "item3", "item5" ] } ] }
> db.resource.update({"resources.resource_id": 2,
"resources.resource_list": "item4"},
{$pull: {"resources.$.resource_list": "item4"}})
> db.resource.find()
{ "_id" : 1, "resources" : [
{ "resource_id" : 1,
"resource_list" : [ "item1", "item2" ] },
{ "resource_id" : 2,
"resource_list" : [ "item3","item5" ] } ] }
不過是更好的運行兩個查詢在同一時間?
> db.algo.update({"resources.resource_id": 2,
"resources.resource_list": "item4"},
{$addToSet:{"resources.$.resource_list": "item5"},
$pull: {"resources.$.resource_list": "item4"}})
字段名稱不能重複使用修改
感謝Gergo對這個您迴應允許的。這非常有幫助,爲了避免對此操作的多個聲明,我稍微改變了我的模型。再次感謝您對此的幫助 – user3315068