Poiché hai già creato un indice composto per (a, b) , tutte le espressioni delle clausole sono supportate dagli indici -> mongo utilizzerà la scansione dell'indice invece della scansione della raccolta. Probabilmente è abbastanza veloce.
Riferimento:$ o clausole e indici
Ora sulla tua domanda
$in abbinare l'intero campo. Se vuoi abbinare (a,b) quindi ovviamente (a,b) deve diventare un oggetto incorporato da cercare con $in .
Non sono sicuro che la creazione di oggetti incorporati soddisfi il tuo schema/requisito corrente. Ma se è il caso, $in è noto per prestazioni migliori rispetto a $or
:
In questo caso, se hai incorporato un oggetto come:{e: {a: 'x', b: 'y'}} quindi db.collections.createIndex({e: 1}) abbinato a $in accelererà le cose