Eftersom du redan skapar ett sammansatt index för (a, b) , alla dina klausuluttryck stöds av index -> mongo kommer att använda index scan istället för samling scan. Det är förmodligen tillräckligt snabbt.
Referens:$or Clauses and Indexes
Nu om din fråga
$in matcha hela fältet. Om du vill matcha (a,b) sedan uppenbarligen (a,b) måste bli ett inbäddat objekt för att söka med $in .
Inte säker på om att göra inbäddade objekt passar ditt nuvarande schema/krav. Men om så är fallet, $in har känt för bättre prestanda jämfört med $or
:
I det här fallet, om du har inbäddat objekt som:{e: {a: 'x', b: 'y'}} sedan db.collections.createIndex({e: 1}) ihopkopplad med $in kommer att påskynda saker och ting