数据库中的数据
fieldA : 'aaaaa',
fieldB : {
en : 'aaaaaaaaaa',
de : 'bbbbbbbbbb'
}
新数据
val = {
fieldA : 'aaaaa11',
fieldB : {
en : 'aaaaa1111'
}
}
我试过这段代码
Model.findOneAndUpdate({fieldA : val.fieldA},{ $set : val})
当我运行此命令时,'fieldB.de'丢失了。我想知道如何更新结果如下所示
fieldA : 'aaaaa11',
fieldB : {
en : 'aaaaa1111',
de : 'bbbbbbbbbb'
}
答案 0 :(得分:0)
试试这个:
Model.findOneAndUpdate({fieldA : val.fieldA},{
"$set": {
"fieldA": val.fieldA,
"fieldB.en": val.fieldB.en
}
})
在您的解决方案中,您将文档completny与其他文件一起更新。要仅更新特定字段,必须在“$ set”对象
中指定此字段答案 1 :(得分:0)
我通过先找到文档并手动编辑 de 对象来解决此问题。
/* Recursive function to update manually an object */
const update = (obj, newValues) => {
Object.entries(newValues).forEach( ([key, value]) => {
if(typeof value === 'object'){
update(obj[key], value);
} else {
obj[key] = value;
}
});
}
/* Find document, update and save */
const infoToUpdate = {};
const doc = await Model.findOne({ field: valueToFind });
if (doc) {
object.update(doc, infoToUpdate);
doc.save();
}