2015-07-16 3 views
0

Je suis en train de mettre à jour le document de tableau intégré dans la structure de collection estde mise à jour dans MongoDB

 { 
      id: 1, 
      fields:[ 
       { 
        "lang" : "eng","embeddedArray" : ["A","B","C"] 
       }, 
       { 
        "lang" : "abcd","embeddedArray" :["A","D","E"] 
       }] 
     } 

Je veux mettre à jour A avec en embeddedArray je tente de mettre à jour en utilisant cette requête, mais il met à jour l'ensemble tableau avec « a » au lieu de [ « a », « B », « C »]

db.collectionName.update({"fields.embeddedArray" : 'A'}, {"$set" : {"fields.$.embeddedArray" : "a"}}); 

leur aucune façon à mettre à jour sans perdre les autres éléments dans le tableau?

+0

Avez-vous essayé d'utiliser, addToSet $ ​​au lieu de $ fixé? – Makoton

+0

oui tout à l'heure j'ai essayé avec $ addToSet suivant est la sortie du tableau ["A", "B", "C", "a"] –

Répondre

0

S'il vous plaît vérifier la requête ci-dessous:

db.collectionName.find({"fields":{$elemMatch: 
         {"lang":"A"}}}).forEach(function(doc){ 
         var fields = doc.fields; 
         var i,k; 
         for(i=0; i<fields.length; i++) 
          { 
         k = fields[i].embeddedArray.indexOf("A"); 
         fields[i].embeddedArray.splice(k,1,"a"); 
          } 
db.collectionName.update({ _id: doc._id},{$set:{"fields": fields}}); 
}); 
+0

son travail merci –