[英]How do I partially update a nested schema in mongoose?
编辑:在尝试了许多不同的方法后,我找到了一个有效的解决方案,可以将任何对象映射到猫鼬理解的格式。 在此处查看解决方案: https : //stackoverflow.com/a/69547021/17426304
const updateNestedObjectParser = (nestedUpdateObject) => {
const final = {
}
Object.keys(nestedUpdateObject).forEach(k => {
if (typeof nestedUpdateObject[k] === 'object' && !Array.isArray(nestedUpdateObject[k])) {
const res = updateNestedObjectParser(nestedUpdateObject[k])
Object.keys(res).forEach(a => {
final[`${k}.${a}`] = res[a]
})
}
else
final[k] = nestedUpdateObject[k]
})
return final
}
原问题:
我有一个猫鼬结构
ChildSchema = {
childProperty: String,
childProperty2: String
}
MainSchema = {
mainProperty: String,
mainProperty2: String,
child: childSchema
}
在我的更新函数中,我想传递mainSchema
一个部分对象,并且只更新我传递给函数的属性。 这适用于我的mainSchema
上的直接属性,但不适用于我的childSchema
。 它用我的请求给出的部分对象覆盖整个子属性。
所以我的更新对象看起来像这样
const updates = {
child: {
childProperty2: 'Example2'
}
}
如何只更新 childProperty2 而不删除childProperty
? 在这个例子中,单独更新每个属性很容易,但现实世界的对象要大得多,可以嵌套到多个级别。
我尝试使用解构,但它似乎不起作用
const example = MainSchema.findOne({_id})
if (updates.child) example.child = {...example.child, ...updates.child} // Does not work
在猫鼬(6.0)中有解决方案吗?
像这样改变你的代码:
const updates = {
"child.childProperty2": 'Example2'
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.