Обновление элемента во всех документах в коллекции MongoDB

Я запускаю следующий запрос с целью обновления одного элемента во всех существующих документах в коллекции. Я в основном пытаюсь очистить их значение до «0».

Вот код:

MongoCollection collection = db.GetCollection(DataAccessConfiguration.Settings.CollectionName);
var query = Query.Exists("ElementName", true);
var update = Update.Set("ElementName", "0");
collection.Update(query, update);

Он обновляет только один документ.

Как обновить все элементы одновременно?


person agarcian    schedule 25.12.2011    source источник


Ответы (1)


Обновления в MongoDB по умолчанию затрагивают 0 или 1 документ (0, только если спецификатор запроса ничему не соответствует). Чтобы обновить все документы, вам нужно передать UpdateFlags.Multi в качестве третьего аргумента Update. Существует также версия Update с 4 аргументами, которая принимает флаг «безопасного режима» в качестве четвертого аргумента.

(Безопасный режим связывает команду getLastError с обновлением и заставляет драйвер ждать, пока сервер не подтвердит, что запись прошла успешно. Существуют различные варианты безопасного режима, который будет ожидать подтверждения от нескольких серверов, если вы используете набор реплик, который будет ждать только определенный период времени, а затем вернется с ошибкой и т. д.).

Также не забудьте ознакомиться с документацией по драйверу C# для получения подробной информации об API.

person dcrosta    schedule 25.12.2011
comment
Именно то, что мне было нужно. Мне не хватало аргумента UpdateFlags.Multi. - person agarcian; 26.12.2011