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