Sie haben diesen Fehler
erhaltenweil Ihre zweite Suchanfrage mit mehreren Unterdokumenten übereinstimmte . Derzeit ist es nicht möglich, den Positionsoperator zu verwenden um alle Elemente in einem Array mit dem Positionsoperator zu aktualisieren.
Um Ihr Problem zu lösen, können Sie also diesem Prozess folgen
-
Suchen Sie das Dokument mit _id und das Unterdokument mit $elemMatch und dann
-
aktualisiere jedes untergeordnete Dokument und speichere das Dokument erneut
kann so versuchen:
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);
});