2012-03-21 109 views
1

如果选择器(第一参数)在集合中选择多个文档,MongoDB是否支持多文档更新?MongoDB中的多文档更新问题

在下面的示例中,第一个工作正常,因为它只选择特定文档并修改zip值。

虽然在第二种情况下收集$地址有多个文件,其中'家'=>'加拿大',它不会更新任何东西。

有人可以帮我吗?

$addresses->update(array('_id' => new MongoId('4f69de380c211d6c21000001')), 
       array('$set' => array('zip' => 20))); 

$addresses->update(array('home' => 'canada')), 
       array('$set' => array('zip' => 20))); 

编辑:

等效的JavaScript命令

db.addresses.update({home: "canada"}, {$set: {zip: 20}}) 

更新拉链第一次遇到匹配的价值,这是预期的行为。

控制台命令正在更新至少一个文档,如果选择器匹配多个文档,PHP不会执行任何操作。

回答

3

只要第二条语句匹配任何东西,它总是应该更新单个文档。

如果您希望它适用于多个文档,您应该按照这里所述的那样在多个标志中传递。

http://www.php.net/manual/en/mongocollection.update.php

在你的情况下,查询应为:

$addresses->update(array('home' => 'canada'), 
      array('$set' => array('zip' => 20)), 
      array('multiple' => true) 
); 
+0

这是一个语法错误 '加拿大')),而不是 '加拿大'),.非常感谢你的精彩书籍。我刚开始阅读。 – 2012-03-21 14:46:05