Om de vraag over $in te beantwoorden....
Ik heb wat prestatietests gedaan met het volgende scenario:
~24 miljoen documenten in een verzameling
Zoek 1 miljoen van die documenten op op basis van een sleutel (geïndexeerd)
Gebruik CSharp-stuurprogramma van .NET
Resultaten:
1 tegelijk query's uitvoeren, enkele thread:109s
1 tegelijk query's uitvoeren, meerdere threads:48s
100K tegelijk query's uitvoeren met $in, single threaded=20s
Query's uitvoeren 100K tegelijk met $in, multi threaded=9s
Dus merkbaar betere prestaties met een grote $in (beperkt tot de maximale querygrootte).
Bijwerken: In navolging van onderstaande opmerkingen over hoe $in presteert met verschillende chunk-groottes (queries multi-threaded):
10 tegelijk opvragen (100000 batches) =8,8s
100 tegelijk opvragen (10000 batches) =4,32s
1000 tegelijk opvragen (1000 batches) =4,31s
10000 opvragen tegelijk (100 batches) =8,4 s
100000 tegelijk opvragen (10 batches) =9 s (volgens originele resultaten hierboven)
Er lijkt dus een goede plek te zijn voor het aantal waarden dat moet worden samengevoegd tot een $in-clausule versus het aantal retourvluchten