- Ударяет только те осколки, которые содержат документы, которые могут соответствовать вашим критериям диапазона.Mongos может определить это, потому что вы запрашиваете ключ осколка и, следовательно, знаете, какие из них имеют право.Запросы к частным осколкам выполняются параллельно.
- То же, что 1).Mongos достаточно умен, чтобы знать, какие куски ударить для этого.
- Каждый пункт в $ or будет оцениваться отдельно.Если пункты соответствуют одному и тому же плану запроса и диапазону фрагментов, они будут / должны быть объединены.Вы можете проверить это, запустив объяснение () для вашего запроса в защищенной среде и следя за возвращенной информацией.Если он содержит объект «пункты», это означает, что не все предложения в вашем $ или могут использовать один и тот же план выполнения запроса.
Это теория, но планы запросов Mongos, как правило, немного противоречивы.Например, с помощью ключа шарнира «ts» и одного фрагмента на каждом из двух шардов, содержащих диапазон minkey-50 и другой 51-maxkey соответственно, этот запрос
{$or:[{$and:[{ts:{$gt:90}}, {ts:{$lt:100}}]}, {$and:[{ts:{$gt:91}}, {ts:{$lt:100}}]}]}
будет правильно преобразован в один запрос квторой кусокНо этот (обратите внимание на 90 вместо 91 во втором предложении)
{$or:[{$and:[{ts:{$gt:90}}, {ts:{$lt:100}}]}, {$and:[{ts:{$gt:90}}, {ts:{$lt:100}}]}]}
на самом деле приведет к запросу к обоим шардам, что не имеет большого смысла, так как вы в основном просите его к $ или двум предложениямэто точно так же.По сути, попробуйте использовать объяснение () и другие инструменты мониторинга, чтобы увидеть, как ваши запросы ведут себя в шардирующей среде, чтобы убедиться, что они работают должным образом.