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