MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB aktualisiert mehrere Unterdokumente mit oder Abfrage

Sie haben diesen Fehler

erhalten

weil 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

  1. Suchen Sie das Dokument mit _id und das Unterdokument mit $elemMatch und dann

  2. 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);
 });