$inについてのQに答えるには....
次のシナリオでいくつかのパフォーマンステストを行いました:
コレクション内の最大2400万のドキュメント
キーに基づいて100万のドキュメントを検索(インデックス付き)
.NETのCSharpドライバーを使用
結果:
一度に1つクエリ、シングルスレッド:109秒
一度に1つクエリ、マルチスレッド:48秒
$ inを使用して一度に100Kをクエリ、シングルスレッド=20秒
クエリ$ in、マルチスレッド=9秒を使用して一度に100K
したがって、大きな$ inを使用するとパフォーマンスが大幅に向上します(最大クエリサイズに制限されます)。
更新: $ inがさまざまなチャンクサイズでどのように機能するかについての以下のコメントに続きます(マルチスレッドのクエリ):
一度に10をクエリする(100000バッチ)=8.8s
一度に100をクエリする(10000バッチ)=4.32s
一度に1000をクエリする(1000バッチ)=4.31s
10000をクエリする一度に(100バッチ)=8.4秒
一度に100000をクエリ(10バッチ)=9秒(上記の元の結果ごと)
したがって、$in句にまとめる値の数とラウンドトリップの数のスイートスポットがあるように見えます