1

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

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

虽然在第二种情况下,集合 $addresses 有多个具有“home”=>“canada”的文档,但它不会更新任何内容。

有人可以帮帮我吗 ?

$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}})

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

控制台命令正在更新至少一个文档,如果选择器匹配超过 1 个文档,PHP 不会做任何事情。

4

1 回答 1

3

只要第二条语句匹配任何内容,它就应该始终更新单个文档。

如果您希望它适用于多个文档,您应该按照此处记录的方式传递多个标志。

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

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

$addresses->update(array('home' => 'canada'),
           array('$set' => array('zip' => 20)),
           array('multiple' => true)
);
于 2012-03-21T14:33:34.453 回答