Da du allerede opretter et sammensat indeks for (a, b) , alle dine sætningsudtryk understøttes af indekser -> mongo vil bruge indeksscanning i stedet for samlingsscanning. Det er nok hurtigt nok.
Reference:$or klausuler og indekser
Nu om dit spørgsmål
$in matche hele feltet. Hvis du vil matche (a,b) så åbenbart (a,b) skal blive et indlejret objekt for at søge med $in .
Ikke sikker på, om det at lave indlejrede objekter passer til dit nuværende skema/krav. Men hvis det er tilfældet, $in har kendt for bedre ydeevne sammenlignet med $or
:
I dette tilfælde, hvis du har indlejret objekt som:{e:{a:'x', b:'y'}} derefter db.collections.createIndex({e:1}) parret med $in vil fremskynde tingene