Aangezien u al een samengestelde index maakt voor (a, b) , al uw clausules worden ondersteund door indexen -> mongo zal indexscan gebruiken in plaats van collectiescan. Het is waarschijnlijk snel genoeg.
Referentie:$or Clausules en Indexen
Nu over uw vraag
$in overeenkomen met het hele veld. Als u wilt overeenkomen met (a,b) dan natuurlijk (a,b) moet een ingesloten object worden om te zoeken met $in .
Ik weet niet zeker of het maken van een ingesloten object past bij uw huidige schema/vereiste. Maar als dat het geval is, $in staat bekend om betere prestaties in vergelijking met $or
:
In dit geval, als u een ingesloten object heeft zoals:{e: {a: 'x', b: 'y'}} dan db.collections.createIndex({e: 1}) gecombineerd met $in zal dingen versnellen