2016-11-24 1 views
0

Je sais que cette question a été posée de différentes façons avant, mais je les ai lu tout et je ne peux pas le faire fonctionner avec le ci-dessous:document de mise à jour dans le tableau MongoDB

Voici un exemple de doc:

"_id" : ObjectId("583659c5be5f0e6f70c95633"), 
"firstName" : "da", 
"lastName" : "ksk", 
"email" : "[email protected]", 
"surveyResults" : [ 
    { 
     "mouseTracking" : [ ], 
     "result" : "White", 
     "question" : "What color website do you prefer?", 
     "questionNumber" : "0" 
    }, 
    { 
     "mouseTracking" : [ ], 
     "result" : "Laptop", 
     "question" : "What device do you use most to browse the web?", 
     "questionNumber" : "1" 
    }] 

Voici ce que je suis en train de courir dans mangouste et ayant pas de chance:

db.results.update({_id:userIdVar, surveyResults: {$elemMatch: {questionNumber: questionNumVar}}},{$set:{"surveyResults.$.result" : newResultVar}}); 

Je les variables utilisées et je sais qu'ils ont les valeurs propres à correspondre à ce qui est dans les endroits dont j'ai besoin mettre à jour. Y a-t-il quelque chose qui me manque?

+0

quel problème face à vous? –

Répondre

0

Jusqu'ici, j'imagine que le type miss correspond à l'élément correspondant. Dans votre exemple de données questionNumber est une chaîne de caractères, donc si vous comparez avec le type entier questionNumVar alors cela ne devrait pas fonctionner. donc pour comparer le besoin de convertir en chaîne (si entier) devrait autrement fonctionner.

peut essayer comme:

db.results.update({_id:userIdVar, surveyResults: {$elemMatch: {questionNumber: questionNumVar.toString()}}},{$set:{"surveyResults.$.result" : newResultVar}}).exec(); 

alors il devrait fonctionner.

+0

J'ai une chose amusante que je n'ai pas complètement réalisé, j'ai raté. Je n'exécutais pas la commande. J'ai ajouté le débogage de mongoose avec la consignation de console partout et j'ai vu le log de la console être tiré sans que le déboguage de mongoose ait été tiré sur le fonctionnement de la mise à jour. Ajouté .exec et cela a fonctionné –

0

J'ai ajouté quelques niveaux de consignation de la console dans toutes les conditions, avant et après la mise à jour et j'ai vu que tous les chemins étaient parcourus. Puis j'ai ajouté la ligne:

mongoose.set('debug', true); 

Ceci enregistre toutes les interactions de mangouste avec le DB. J'ai vu que ma commande que je collais ne fonctionnait même pas! Il s'avère que j'ai accidentellement laissé le

.exec() 

à la fin afin qu'il n'exécutait pas la commande. Après quelques heures de vérification et de triple vérification de ma syntaxe, des types de variables, c'était juste cela.

j'ai fait dans le processus de ce savoir plus sur l'opérateur $ et vous devriez lire sur si vous ne connaissez pas sa place dans les mangoustes/MongoDB