2013-08-22 3 views
0

Il existe un moyen de concaténer plus de mises à jour? Par exemple, je voudrais changer plus de valeurs dans le même élément. Donc, ayant ceci ...Mongodb, concattez plus de mises à jour dans une requête

{ 
    cc: [ 
      { user_id: "1", hasSeen:true} 
     ,{ user_id: "2", hasSeen:false} 
     ,{ user_id: "3", hasSeen:false} 

    ] 
    ,conversation: [{ 
     user_id: "1", 
     text: "message by 1, to 2and3" 
    }] 
} 

... Je voudrais pousser un nouvel objet de conversation et aussi changer toutes les valeurs hasSeen.

Pour faire le premier point, pas de problème, je pousse juste un nouvel objet de conversation. Et cela fonctionne ...

...update(
     { _id : _param.conversation_id } 
     ,{ $push:{ conversation:{user_id:"2",text:"message by 2, to 1,3"} }} 
    ) 
    .exec(function(err, numAffected, rawResponse) { 
    }); 

Mais je voudrais également changer les trois valeurs "hasSeen" dans le même temps. c'est possible? Puis-je le faire avec une requête? ou je devrais le diviser en deux requêtes?

ps: J'utilise de la mangouste.

Répondre

0

Actuellement, l'opérateur de position (que je pense que vous aurez besoin ici) ne fonctionne pas de telle sorte que vous pouvez faire un type de mise à jour sous condition par laquelle vous itérer une liste de $inc s ou $set s pour modifier ces valeurs sous-document .

Il ya un JIRA pour une chose qui pourrait éventuellement vous aider: https://jira.mongodb.org/browse/SERVER-6566?page=com.atlassian.jira.plugin.system.issuetabpanels:changehistory-tabpanel mais il est classé sous "caractéristiques dont nous ne sommes pas sûrs".

Il est préférable de diviser cette valeur actuellement.

+0

merci Sammaye! –

+1

@CodeGirl Une façon, si cela doit être atomique est de mettre à jour ce côté client et de pousser le document tout à la fois avec save(), cependant, cela pourrait créer des conditions de course pour vous – Sammaye

Questions connexes