2012-08-15 10 views
2

mongodb mise à jour avec multi vrai ne pas mettre à jour tous les documents, plutôt il met juste à jour les documents initiaux 1 ou 2. Voici la requête. Est-ce à cause de la limite que j'utilise? Quoi qu'il en soit, j'ai supprimé la limite et ne met toujours pas à jour les 31 documents trouvés par les critères correspondants. Y at-il quelque chose de mal avec la syntaxe de mise à jour de mongoose?mongoose: mongodb mise à jour avec multi vrai ne pas mettre à jour tous les documents

db.update({biztype:msg.biztype, 'g_location': {$near: [msg.lng, msg.lat], $maxDistance:10/111.12}},{ 
         $push:{fromusers:{ 
          ip: ip, 
          msg: msg.msg, 
          u_name: msg.name, 
          u_mobile: msg.mobile, 
          u_email: msg.email, 
          comment_date: new Date() 
         }} 
        }, false, true). 
        limit(10); 
+0

Voulez-vous dire que lorsque vous exécutez la requête avec ce filtre vous récupérer 31 documents? Lesquels sont ceux qui sont mis à jour? –

+0

Cela semble être dans le shell et ne pas utiliser Mongoose? Est-ce que 'db.update' est une faute de frappe (il manque un nom de collection)? – JohnnyHK

+0

@Asya, les deux premiers documents sont en cours de mise à jour. Parfois, seul le premier est en cours de mise à jour. – user644745

Répondre

4

Avec la compréhension que db est un modèle Mongoose, vous devez modifier votre liste de paramètres pour être compatible avec le Mongoose update:

db.update({biztype:msg.biztype, 'g_location': {$near: [msg.lng, msg.lat], $maxDistance:10/111.12}}, 
    { 
     $push:{fromusers:{ 
      ip: ip, 
      msg: msg.msg, 
      u_name: msg.name, 
      u_mobile: msg.mobile, 
      u_email: msg.email, 
      comment_date: new Date() 
     }} 
    }, 
    { multi: true }, // <== This boolean option goes into the options parameter 
    function (err, numberAffected) { 
     // Your callback, if needed 
    } 
); 
+0

C'est génial. Je ne savais pas à ce sujet. Je vais l'essayer bientôt. – user644745

+0

dans le cas où je veux upsert être vrai et multi faux, j'espère que ce serait {multi: false, upsert: true} – user644745

+0

@ user644745 C'est correct. – JohnnyHK

Questions connexes