sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB aktualizuje více vnořených dokumentů pomocí nebo dotazu

Máte tuto chybu

kvůli vašemu druhému dotazu, který se shoduje s více dílčími dokumenty . V současné době není možné použít poziční operátor k aktualizaci všech položek v poli pomocí pozičního operátoru.

takže k vyřešení vašeho problému můžete postupovat podle tohoto postupu

  1. Najít dokument pomocí _id a najít dílčí dokument pomocí $elemMatch a poté

  2. aktualizujte každý dílčí dokument a znovu dokument uložte

můžete zkusit takto:

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


  1. Jak uložit pole vstupů do podřízeného schématu ve vnořeném mongoose schématu?

  2. Vliv datového typu indexu na výkon v MongoDB?

  3. Změňte tvar všech dokumentů ve sbírce

  4. Jak bezpečné je ukládat relace s Redis?