mongodb更新内嵌数组的问题,只能用循环来处理吗
发布于 7 年前 作者 dengnan123 4253 次浏览 来自 问答

image.png 数据结构如上,更新的条件是yoocare_id,yoocare_info是一个数组,符合条件的yoocare_id可能有多个,需要把符合条件的residue_degree更新掉,现在我用的方法比较笨,先找到yoocare_info这个数组,然后用map循环,符合yoocare_id的,处理下residue_degree,最后拿到一个全新的yoocare_info数组,最后把数组更新掉,这种方法数量小的话,还能用数据量大的话,速度岂不是要爆炸。。。。

求老哥们指点

6 回复

thisDocument.yoocare_info[1].residue_degree = 2; thisDocument.markModified(‘residue_degree’); // markModified 标记下修改的字段名字 thisDocument.save();

@Studying-Man 没看懂啊 老哥,能不能稍微解释下 嘿嘿

@dengnan123 你用mongoose没, thisDocument 是你当前这个文档对象, thisDocument.yoocare_info[1].residue_degree = 2; 假如现在把yoocare_info中第二个的residue_degree修改为2,然后保存这个修改,往往我们直接会调用thisDocument.save(),但是会不起作用,所哟先告诉mongo我们对那个字段进行了修改,thisDocument.markModified(‘residue_degree’); // markModified 标记下修改的字段名字最后再 thisDocument.save();

@Studying-Man 老哥你 mongodb 本地的有没有升级到3.6,有没有看到官网这么例子image.png

yoocare_info.yoocare_id 用这个当条件呢,这种数据结构分两个表是不是比较好点

@dengnan123 这个方式就可以解决你的需求了

db.devices.update({ ‘yoocare_info.yoocare_id’: ‘abc123’ }, { $set: { ‘yoocare_info.$.residue_degree’: ‘1’ } }, { multi: true })

回到顶部