Ponieważ już utworzyłeś indeks złożony dla (a, b) , wszystkie twoje wyrażenia klauzul są obsługiwane przez indeksy -> mongo użyje skanowania indeksów zamiast skanowania kolekcji. Prawdopodobnie wystarczająco szybko.
Odniesienie:klauzule i indeksy $or
Teraz o twoim pytaniu
$in dopasuj całe pole. Jeśli chcesz dopasować (a,b) to oczywiście (a,b) musi stać się obiektem osadzonym, aby wyszukiwać za pomocą $in .
Nie jestem pewien, czy tworzenie osadzonego obiektu pasuje do Twojego obecnego schematu/wymagania. Ale jeśli tak jest, $in znany z lepszej wydajności w porównaniu do $or
:
W tym przypadku, jeśli masz osadzony obiekt, taki jak:{e: {a: 'x', b: 'y'}} następnie db.collections.createIndex({e: 1}) w połączeniu z $in przyspieszy działanie