Cố gắng sử dụng vị trí $
nhà điều hành
trong bản cập nhật xác định một phần tử trong một mảng để cập nhật mà không chỉ định rõ ràng vị trí của phần tử trong mảng, nhưng điều này sẽ chỉ khớp với một phần tử tại một thời điểm:
User.update(
{
"local.email": user,
"devices.id": { "$ne": deviceID },
"devices.name": { "$ne": deviceName }
},
{
"$set": {
"devices.$.id": deviceID,
"devices.$.name": deviceName
}
}
);
Từ tài liệu , toán tử vị trí $ hoạt động như một trình giữ chỗ cho phần tử đầu tiên phù hợp với tài liệu truy vấn và trường mảng phải xuất hiện như một phần của tài liệu truy vấn do đó tài liệu truy vấn
"devices.id": { "$ne": deviceID },
"devices.name": { "$ne": deviceName }
chứa device
mảng và sẽ khớp với các tài liệu đó nơi device
mảng id
không bằng deviceID
và tên không giống với tên mà bạn đang cố gắng cập nhật. Điều này thậm chí sẽ khớp với các tài liệu trong đó device
mảng trống.