Puisque vous créez déjà un index composé pour (a, b)
, toutes vos expressions de clauses sont prises en charge par les index -> mongo utilisera l'analyse d'index au lieu de l'analyse de collection. C'est probablement assez rapide.
Référence :$or Clauses and Indexes
Maintenant à propos de votre question
$in
correspondre à tout le champ. Si vous voulez faire correspondre (a,b)
alors évidemment (a,b)
doit devenir un objet intégré pour effectuer une recherche avec $in
.
Vous ne savez pas si la création d'un objet intégré correspond à votre schéma/exigence actuel. Mais si c'est le cas, $in
a connu pour de meilleures performances par rapport à $or
:
Dans ce cas, si vous avez un objet intégré comme :{e: {a: 'x', b: 'y'}}
puis db.collections.createIndex({e: 1})
associé à $in
va accélérer les choses