web-dev-qa-db-ja.com

Mongodb:$ in演算子と多くの単一クエリ

MongoDBが多くの要求/秒を処理できることは知っていますが、_idを指定してコレクションの多くのドキュメントをクエリする必要があるとしましょう。より良い音:取得したいすべてのIDを使用して_id属性に$ inを作成するか、findOneクエリをループしますか?

39
spacenick

私は間違いなく$ inクエリを使用して、_idの配列を提供します。

例:

db.collection.find({
    "key": {
        "$in": [
            ObjectId("xxx"),
            ObjectId("yyy"),
            ObjectId("zzz")
        ]
    }
})

どうして?

  • ループすると、各クエリに対して一定量のセットアップとティアダウンが発生し、カーソルが作成されて使い果たされ、オーバーヘッドが発生します。
  • ローカルマシンでこれを行っていない場合は、すべてのリクエストに対してtcp/ipオーバーヘッドも発生します。ローカルでは、ドメインソケットを使用できます。
  • デフォルトで作成される「_id」にはインデックスがあり、バッチ要求で返すドキュメントのグループを収集するのは非常に高速であるため、これを小さなクエリに分割する必要はありません。

いくつかの追加のドキュメントがあります here 確認したい場合。

46
Tyler Brock