2012-08-15 62 views
2

mongodb更新与多真没有更新所有的文件,而是它只是更新最初的1或2文件。这是查询。是因为我使用的限制吗?无论如何,我删除了限制,它仍然没有更新匹配标准找到的所有31个文件。 mongoose更新语法有什么问题吗?猫鼬:mongodb更新与多真没有更新所有文件

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

你的意思是,当你运行与过滤器查询你取回31份文件?哪些正在更新? – 2012-08-15 06:53:49

+0

这似乎是在壳和不使用猫鼬? 'db.update'是一个错字(缺少一个集合名称)? – JohnnyHK 2012-08-15 13:35:55

+0

@Asya,前2个文档正在更新。有时只有第一个正在更新。 – user644745 2012-08-15 15:31:22

回答

4

的理解是db是猫鼬的模式,你需要修改你的参数列表是与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

这太棒了。我不知道这件事。将尽快尝试。 – user644745 2012-08-15 19:39:52

+0

万一我想upsert是真实的和多假的,我希望它会是{multi:false,upsert:true} – user644745 2012-08-15 19:45:33

+0

@ user644745这是正确的。 – JohnnyHK 2012-08-15 19:58:16