Тъй като вече създавате съставен индекс за (a, b)
, всички ваши изрази на клаузи се поддържат от индекси -> mongo ще използва сканиране на индекс вместо сканиране на колекция. Вероятно е достатъчно бързо.
Справка:$or клаузи и индекси
Сега относно вашия въпрос
$in
съпоставете цялото поле. Ако искате да съвпаднете с (a,b)
тогава очевидно (a,b)
трябва да стане вграден обект за търсене с $in
.
Не съм сигурен дали създаването на вграден обект отговаря на текущата ви схема/изискване. Но ако случаят е такъв, $in
е известен с по-добра производителност в сравнение с $or
:
В този случай, ако имате вграден обект като:{e: {a: 'x', b: 'y'}}
след това db.collections.createIndex({e: 1})
съчетано с $in
ще ускори нещата