Como você já criou um índice composto para
(a, b) , todas as suas expressões de cláusulas são suportadas por índices -> mongo usará varredura de índice em vez de varredura de coleção. Provavelmente rápido o suficiente. Referência:$ou cláusulas e índices
Agora sobre sua pergunta
$in corresponder ao campo inteiro. Se você deseja corresponder (a,b) então obviamente (a,b) deve se tornar um objeto incorporado para pesquisar com $in . Não tenho certeza se a criação de objetos incorporados se encaixa no seu esquema/requisito atual. Mas se for o caso,
$in é conhecido pelo melhor desempenho em comparação com $or
:Nesse caso, se você tiver um objeto incorporado como:
{e: {a: 'x', b: 'y'}} então db.collections.createIndex({e: 1}) emparelhado com $in vai acelerar as coisas