繁体   English   中英

如何部分更新猫鼬中的嵌套模式?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM