首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从SubDocument删除属性

从SubDocument删除属性
EN

Stack Overflow用户
提问于 2018-12-29 19:46:51
回答 2查看 311关注 0票数 2

我有以下蒙鹅模式和代码:

模式:

代码语言:javascript
复制
{
    ...
    inv: {
        type: Object,
        default: {}
    },
    ...
}

代码(第1版),其中targetData是猫鼬DocumentitemStringamountNumber

代码语言:javascript
复制
targetData.inv[item] = targetData.inv[item] - amount;
if (!targetData.inv[item]) delete targetData.inv[item];
await targetData.save();

代码(第2版):

代码语言:javascript
复制
targetData.inv[item] = targetData.inv[item] - amount;
if (!targetData.inv[item]) targetData.inv[item] = undefined;
await targetData.save();

问题是,这两次尝试都没有从文档中删除targetData.inv[item]。我的目标是从一个"thing"中删除一个项目,比如SubDocument。例如:

在此之前:

代码语言:javascript
复制
{
    ...
    inv: {
        thing: 5
    },
    ...
}

之后:

代码语言:javascript
复制
{
    ...
    inv: {},
    ...
}

注意:当amount小于5 (在上面的示例中)时,代码工作正常。如果我要删除所有的5,当它不更新时,它将保持为5

注2:我使用的是猫鼬5.3.15

我怎样才能做到这一点?

编辑:看起来只有当inv只有一个属性时才会发生这种情况。拥有类似于inv: { thing: 5, anotherThing: 6 }的东西将与delete关键字完美地工作。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-29 20:53:25

找出出了什么问题。我所需要做的就是手动告诉猫鼬inv已经被修改了,使用了targetData.markModified("inv")文档。这是因为SchemaType是)

票数 1
EN

Stack Overflow用户

发布于 2018-12-29 21:10:24

我知道你解决了这个问题,但我有个主意。通常,在这种情况下,我想获取文档,遍历对象,找到项目并删除它,然后再次保存文档。这是我在做的一种天真的方式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53972854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档