MongoDB рекомендует все операции update()
для подсвеченной коллекции, которые определяют параметр 'multi:false'
, должны включать ключ осколка в условии запроса, чтобы запрос попадал только в конкретный кластер клана. Если ни одна клавиша осколок не найдено и 'multi:false'
, он возвращает эту ошибку (см http://docs.mongodb.org/manual/core/sharded-cluster-query-router/):Обновление MongoDB с соответствующим ключом осколка и множественным = истинным
update does not contain _id or shard key for pattern
Я переключение мой код использовать sharded коллекцию. Мой код использует update()
с 'multi:true'
по умолчанию, и я не хочу изменять этот параметр по умолчанию, чтобы избежать любой потенциальной ошибки выше. Мой вопрос: если я включу ключ осколка в update()
с 'multi:true'
, будут ли монгоры достаточно умными, чтобы перенаправить запрос на конкретный кластер с помощью ключа осколка и проигнорировать 'multi: true'
?
EDIT: Оформить заказ этих кодов, что подтверждает то, что сказал @wdberkeley.
Версия 2.4:
https://github.com/mongodb/mongo/blob/v2.4/src/mongo/s/strategy_shard.cpp#L941
Версия 2.6:
https://github.com/mongodb/mongo/blob/v2.6/src/mongo/s/chunk_manager_targeter.cpp#L250
Спасибо @wdberkeley. Не могли бы вы подтвердить, что это будет работать для версий mondodb 2.6 и 2.4? – anhlc