Многократное обновление документа в mongodb - PullRequest
1 голос
/ 21 марта 2012

Поддерживает ли MongoDB обновление нескольких документов, если селектор (первый аргумент) выбирает более 1 документа в коллекции.

В приведенном ниже примере первый работает нормально, так как он выбирает только конкретный документ и изменяет значение почтового индекса.

В то время как во втором случае коллекция $ address имеет несколько документов с именем '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 для первого обнаруженного совпадения, является ли это ожидаемым поведением.команда обновляет хотя бы один документ, PHP ничего не делает, если селектор соответствует более чем одному документу.

1 Ответ

3 голосов
/ 21 марта 2012

Если второе выражение совпадает с чем-либо, оно всегда должно обновлять один документ.

Если вы хотите, чтобы оно применялось к нескольким документам, вы должны передать флаг множественного числа, как описано здесь.

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

В вашем случае запрос должен выглядеть следующим образом:

$addresses->update(array('home' => 'canada'),
           array('$set' => array('zip' => 20)),
           array('multiple' => true)
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...