Yêu cầu vài lần chỉnh sửa trên truy vấn, nếu không thì nó gần như ở đó. Cập nhật không hoạt động vì $elemMatch
cho attributeSet
(mảng tài liệu) sẽ xảy ra trên id
thuộc tính của các tài liệu đó để lọc chứ không phải trên propertySet.id , nó sẽ không hình dung nó là gì. Và elemMatch lồng nhau là không bắt buộc, chỉ cần sử dụng ký hiệu dấu chấm .
Để gỡ lỗi, bạn có thể dùng thử bằng truy vấn tìm.
Truy vấn (Shell):
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
}
);