Como ya creaste un índice compuesto para (a, b)
, todas las expresiones de sus cláusulas son compatibles con los índices -> mongo utilizará el escaneo de índice en lugar del escaneo de colección. Probablemente lo suficientemente rápido.
Referencia:$or Clauses and Indexes
Ahora sobre tu pregunta
$in
coincide con todo el campo. Si desea hacer coincidir (a,b)
entonces obviamente (a,b)
debe convertirse en un objeto incrustado para buscar con $in
.
No estoy seguro de si hacer que el objeto incrustado se ajuste a su esquema/requisito actual. Pero si es el caso, $in
ha conocido por un mejor rendimiento en comparación con $or
:
En este caso, si tiene un objeto incrustado como:{e: {a: 'x', b: 'y'}}
luego db.collections.createIndex({e: 1})
emparejado con $in
acelerará las cosas