符号$
仅修改搜索中最后一个数组的最后位置,您可以使用$addToSet
or$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"}})
修饰符不允许字段名称重复