Mongoose - 从子文档中删除 属性
Mongoose - Delete property from SubDocument
我有以下 Mongoose 架构和代码:
架构:
{
...
inv: {
type: Object,
default: {}
},
...
}
代码(版本 1),其中 targetData
是 Mongoose Document
,item
是 String
,amount
是 Number
:
targetData.inv[item] = targetData.inv[item] - amount;
if (!targetData.inv[item]) delete targetData.inv[item];
await targetData.save();
代码(版本 2):
targetData.inv[item] = targetData.inv[item] - amount;
if (!targetData.inv[item]) targetData.inv[item] = undefined;
await targetData.save();
问题是这些尝试都没有从文档中删除 targetData.inv[item]
。我的目标是从子文档中删除一个项目,比如 "thing"
。例如:
之前:
{
...
inv: {
thing: 5
},
...
}
之后:
{
...
inv: {},
...
}
注意:当 amount
是一个小于 5
的数字时(在上面的例子中),代码工作正常。如果我删除所有 5
,那就是当它不更新时,它将保持 5
.
注意 2:我使用的是 Mongoose 5.3.15
我怎样才能做到这一点?
编辑: 看起来只有当 inv
只有 1 个 属性 时才会发生这种情况。 inv: { thing: 5, anotherThing: 6 }
之类的东西将与 delete
关键字完美配合。
找出问题所在。我需要做的就是使用 targetData.markModified("inv")
手动告诉 Mongoose inv
已被修改。 Docs. This is due to the SchemaType being Mixed (Object
)
我知道你解决了这个问题,但我有一个想法。
通常在这种情况下,我想获取文档并遍历对象并找到项目并将其删除并再次保存文档。这是我正在做的一种天真的方式。
我有以下 Mongoose 架构和代码:
架构:
{
...
inv: {
type: Object,
default: {}
},
...
}
代码(版本 1),其中 targetData
是 Mongoose Document
,item
是 String
,amount
是 Number
:
targetData.inv[item] = targetData.inv[item] - amount;
if (!targetData.inv[item]) delete targetData.inv[item];
await targetData.save();
代码(版本 2):
targetData.inv[item] = targetData.inv[item] - amount;
if (!targetData.inv[item]) targetData.inv[item] = undefined;
await targetData.save();
问题是这些尝试都没有从文档中删除 targetData.inv[item]
。我的目标是从子文档中删除一个项目,比如 "thing"
。例如:
之前:
{
...
inv: {
thing: 5
},
...
}
之后:
{
...
inv: {},
...
}
注意:当 amount
是一个小于 5
的数字时(在上面的例子中),代码工作正常。如果我删除所有 5
,那就是当它不更新时,它将保持 5
.
注意 2:我使用的是 Mongoose 5.3.15
我怎样才能做到这一点?
编辑: 看起来只有当 inv
只有 1 个 属性 时才会发生这种情况。 inv: { thing: 5, anotherThing: 6 }
之类的东西将与 delete
关键字完美配合。
找出问题所在。我需要做的就是使用 targetData.markModified("inv")
手动告诉 Mongoose inv
已被修改。 Docs. This is due to the SchemaType being Mixed (Object
)
我知道你解决了这个问题,但我有一个想法。 通常在这种情况下,我想获取文档并遍历对象并找到项目并将其删除并再次保存文档。这是我正在做的一种天真的方式。