如果mongodb某数据文档中一字段是对象数组,当更改该字段的值时不能更改成功。
发布于 7 年前 作者 spursy 3735 次浏览 来自 问答

问题 : 我在mongodb中的某一字段是数组类型,

  • 情景1: 如果这个字段存的字符串或数字数组如:[123, 456, 789],当我要把他改为另一个字符串或数字数组时可以更改成功。
  • 情景2: 如果这个字段存的字符串或数字数组如:[123, 456, 789],当我要把他改为对象数组如[{name: “zhang”, age: 20},{name: “wang”, age: 3}]时可以更改成功。
  • 情景3: 如果这个字段存的是对象数组如[{name: “zhang”, age: 20},{name: “wang”, age: 3}], 当我要把他更改为另外的对象数组如[{class: “zhang”, grade: 2},class: “zhang”, grade: 2}]。更改不成功,返回的结果是: { n: 0, nModified: 0, ok: 1 }

nodejs 代码如下:

content 字段就是那个属性是数组的字段

	// existeddata 是我需要更改的原数据
	var updateddata = _.cloneDeepWith(existeddata);
    updateddata.content = [{class: "zhang", grade: 2},{class: "zhang", grade: 2}];
    updateddata.update_dt = new Date();
    try {
        var result = await WXAutoReply.update(existeddata, updateddata);
        console.log(result)
        return result;
    }catch(e) {
        return e;
    }
2 回复

修改之前先查询确认,是不是匹配到 document 记录

如果是monogoose的话,可以用我的方法试试 我最近有个需求也要改内嵌的数组,但是没有设置成子文档,所以我拿出来修改了再save 然后用markModified,好像可以触发一下修改了比较深沉的对象或者数据结构通知数据库修改 document.markModified(‘path’);

回到顶部