クエリにはいくつかの修正が必要です。それ以外の場合はほとんど修正が必要です。 $elemMatch
が原因で、更新が機能していません attributeSet
の場合 (ドキュメントの配列)フィールドは id
で発生します attributeSet.id ではなく、フィルタリングするドキュメントのプロパティ 、それが何であるかを理解していません。また、ネストされたelemMatchは必要ありません。ドット表記を使用するだけです 。
デバッグするには、検索クエリで試してみてください。
クエリ(シェル):
db.collection.findOneAndUpdate(
{
_id: settingsToBeUpdated._id,
attributeSet: {
$elemMatch: {
id: attributeSetId,
"attributes.id": id
}
}
},
{
$set: {
"attributeSet.$[as].attributes.$[a].attributeName":
attributeDto.attributeName,
"attributeSet.$[as].attributes.$[a].defaultValue":
attributeDto.defaultValue,
"attributeSet.$[as].attributes.$[a].isRequired": attributeDto.isRequired
}
},
{
arrayFilters: [{ "as.id": attributeSetId }, { "a.id": id }],
returnNewDocument: true
}
);