Untuk menjawab Q tentang $in....
Saya melakukan beberapa tes kinerja dengan skenario berikut:
~24 juta dokumen dalam koleksi
Cari 1 juta dokumen tersebut berdasarkan kunci (diindeks)
Menggunakan driver CSharp dari .NET
Hasil:
Kueri 1 pada satu waktu, satu utas :109s
Kueri 1 per satu, multi utas :48s
Meminta 100K sekaligus menggunakan $in, satu utas=20s
Kueri 100K sekaligus menggunakan $in, multi threaded=9s
Jadi kinerja yang lebih baik secara nyata menggunakan $in yang besar (dibatasi untuk ukuran kueri maksimum).
Pembaruan: Melanjutkan dari komentar di bawah tentang bagaimana kinerja $in dengan ukuran chunk yang berbeda (query multi-threaded):
Membuat kueri 10 sekaligus (100000 batch) =8,8 detik
Meminta 100 sekaligus (10000 batch) =4,32 detik
Meminta 1000 sekaligus (1000 batch) =4,31
Meminta 10000 sekaligus (100 batch) =8,4 detik
Meminta 100000 sekaligus (10 batch) =9 detik (per hasil asli di atas)
Jadi tampaknya ada titik manis untuk berapa banyak nilai yang akan digabungkan ke dalam klausa $in vs. jumlah perjalanan pulang pergi