私はこのような更新操作をしています:
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.",
存在する場合は設定を解除する方法はありますが、存在しない場合はエラーをスローしませんか?
ドキュメントで実行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
、その間に他のスレッドが配列を削除する場合は、これらのエラーに備える必要があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加