mongodb 子文档批量更新不完全的问题

浏览:39日期:2023-07-03

问题描述

有如下数据结构

{ '_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' : '角色扮演'} ]}

请问更新语句要怎么写才能完整的更新所有符合条件的数据

问题解答

回答1:

mongo 的 $ 操作符指代的是第一个匹配到的数组元素,所以只能替换一个数组对象,如果要对内嵌数组的所有匹配对象都进行修改,目前可以通过查询出来修改再写入的方式,暂时没有可以直接实现这个功能的操作符。

相关文章: