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