我有这样的更新操作:
await project.update({
$pull: {
languages: { _id: ObjectId(languageId) },
},
$unset: {
[`entries.$[].${languageId}`]: 1,
},
$set: {
revisions: project.revisions,
},
});
但是如果entries
数组不存在,则会引发错误:
name: 'MongoError',
index: 0,
code: 2,
errmsg: "The path 'entries' must exist in the document in order to apply array updates.",
是否有一种方法可以设置是否存在,但如果不存在则不抛出错误?
答案 0 :(得分:1)
您可以在Model级别上运行它,而不必在update
文档上运行project
,并使用$exists运算符为entries
字段添加附加条件:>
Project.updateOne({ _id: project._id, entries: { $exists: true } } , {
$pull: {
languages: { _id: ObjectId(languageId) },
},
$set: {
revisions: project.revisions,
},
$unset: {
[`entries.$[].${languageId}`]: 1
}
});
问题在于,当没有entries
时,该文档将不匹配,并且上述任何操作都将不会执行。
您还可以尝试在查询中添加$unset
部分,以检查project.entries
是否未定义,但是如果其他一些线程将删除entries
数组,则需要为这些错误做好准备同时。