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