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