Насколько мне известно, запрос никак не манипулируется. Скорее, запрос направляется на любые сегменты, которые могут содержать соответствующие данные, основанные на ключевой части запроса. В случае, если запрос не содержит ключ сегмента, запрос будет перенаправлен на все фрагменты.
Например, если вы шардируете в поле id
, items.find({id: { $in: [1,2,3] }})
будет отправлено на shard1
, shard2
и shard3
, тогда как items.find({id: { $in: [1] }})
будет отправлено только на shard1
. Кроме того, запрос items.find({ref_id: { $in: [1] }})
будет отправлен на shard1
, shard2
, shard3
и любые другие фрагменты, которые могут быть в вашем кластере.
Сканирование индекса в поле ключа шарда должно быть достаточно быстрым, чтобы манипулирование запросом даже не требовалось!