有如下数据结构
{
"_id" : ObjectId("55dc1454f754a3342000002c"),
"title" : "出轨如旋风 防火防盗防小三",
"games" : [
{
"id" : 1615,
"name_zh" : "穿越时空遇见你",
"typename" : "休闲益智"
},
{
"id" : 6356,
"name_zh" : "恋爱物语3:梦想之翼",
"typename" : "角色扮演"
},
{
"id" : 6505,
"name_zh" : "恋爱物语:湛蓝的回忆",
"typename" : "角色扮演"
}
]
}
/* 2 */
{
"_id" : ObjectId("55dc145ef754a3342000002d"),
"title" : "炎炎夏日,跟我一起High翻天!",
"games" : [
{
"id" : 1128,
"name_zh" : "追击野兽",
"typename" : "角色扮演"
},
{
"id" : 3276,
"name_zh" : "世界僵尸大联盟",
"typename" : "策略游戏"
},
{
"id" : 10360,
"name_zh" : "绿色忍者蛙年",
"typename" : "角色扮演"
}
]
}
/* 3 */
{
"_id" : ObjectId("55dc1467f754a3342000002e"),
"title" : "简约而不简单 像素游戏合辑",
"games" : [
{
"id" : 1557,
"name_zh" : "我的世界",
"typename" : "休闲益智"
},
{
"id" : 6228,
"name_zh" : "像素地下城 汉化",
"apk_size" : "5.39M",
"typename" : "角色扮演"
},
{
"id" : 6230,
"name_zh" : "进化之地 汉化版",
"typename" : "角色扮演"
}
]
}
运行批量更新语句:db.getCollection('xxxxx').update({'games.typename':'角色扮演'},{'$set':{'games.$.typename':'角色'}},0,1)
结果发现批量更新不完整,结果如下:
{
"_id" : ObjectId("55dc1454f754a3342000002c"),
"title" : "出轨如旋风 防火防盗防小三",
"games" : [
{
"id" : 1615,
"name_zh" : "穿越时空遇见你",
"typename" : "休闲益智"
},
{
"id" : 6356,
"name_zh" : "恋爱物语3:梦想之翼",
"typename" : "角色"
},
{
"id" : 6505,
"name_zh" : "恋爱物语:湛蓝的回忆",
"typename" : "角色扮演"
}
]
}
/* 2 */
{
"_id" : ObjectId("55dc145ef754a3342000002d"),
"title" : "炎炎夏日,跟我一起High翻天!",
"games" : [
{
"id" : 1128,
"name_zh" : "追击野兽",
"typename" : "角色"
},
{
"id" : 3276,
"name_zh" : "世界僵尸大联盟",
"typename" : "策略游戏"
},
{
"id" : 10360,
"name_zh" : "绿色忍者蛙年",
"typename" : "角色扮演"
}
]
}
/* 3 */
{
"_id" : ObjectId("55dc1467f754a3342000002e"),
"title" : "简约而不简单 像素游戏合辑",
"games" : [
{
"id" : 1557,
"name_zh" : "我的世界",
"typename" : "休闲益智"
},
{
"id" : 6228,
"name_zh" : "像素地下城 汉化",
"apk_size" : "5.39M",
"typename" : "角色"
},
{
"id" : 6230,
"name_zh" : "进化之地 汉化版",
"typename" : "角色扮演"
}
]
}
请问更新语句要怎么写才能完整的更新所有符合条件的数据
3.6 版本之后是支持的哦,需要开启第三个选项 arrayFilters
官网: https://docs.mongodb.com/manual/reference/operator/update/positional-all/#up.S[]
mongo 的 $ 操作符指代的是第一个匹配到的数组元素,所以只能替换一个数组对象,如果要对内嵌数组的所有匹配对象都进行修改,目前可以通过查询出来修改再写入的方式,暂时没有可以直接实现这个功能的操作符。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。