Bạn gặp lỗi này
vì truy vấn thứ hai của bạn khớp với nhiều tài liệu phụ . Hiện tại, không thể sử dụng toán tử vị trí để cập nhật tất cả các mục trong một mảng bằng toán tử vị trí.
vì vậy để giải quyết vấn đề của bạn, bạn có thể làm theo quy trình này
-
Tìm tài liệu bằng _id và để tìm tài liệu phụ bằng $ elemMatch và sau đó
-
cập nhật từng tài liệu con và lưu tài liệu lại
có thể thử như thế này:
db.deduplications.find(
{ $or: [ {
"_id": ObjectId("583fc558668bde730a460e11") ,
"DeviceVersionPairs":{
$elemMatch:{ "DeviceId": ObjectId("5822d0606bfdcd6ec407d9b9") ,
"CloudFolderId": ObjectId("5823110e6bfdd46ec4357582") ,
"DeviceVersionPairs.CloudFileId": ObjectId("582311168cd396223499942a") ,
"DeviceVersionPairs.VersionId": ObjectId("582311168cd396223499942b") }}
} ,
{
"_id": ObjectId("583fc558668bde730a460e11") ,
"DeviceVersionPairs":{
$elemMatch:{ "DeviceId": ObjectId("56dfe1356caaea14a819f1e4") ,
"CloudFolderId": ObjectId("583fb4bc6e7f341874f13bfc") ,
"CloudFileId": ObjectId("583fb539e015b8a53fb71872") ,
"VersionId": ObjectId("583fb4ca6e7f331874213584") }}
} ]
}).forEach(function (doc) {
doc.DeviceVersionPairs.forEach(function (device) {
device.status = 'passive';
});
db.deduplications.save(doc);
});