2013-02-06 10 views
5

を使用してMongoDBで最適化されたクエリ方法約10個の電子メールIDのリストからメールIDの有無のテーブルを検索するアプリケーションを実装します。 $ orと$ inを使って試しました。

$ inはパフォーマンスは向上しますが、重要ではありません。他のものよりも最適化されていますか?

+3

初心者の場合、$は1つのインデックスのみをとります。これは$またはそれ以上の理由(1つの節あたり1つ)のために重要です。 $は、各節の結果を取得し、重複をマージして結果を返すようなものです。それはここで考慮すべき重要なポイントですが、$ inは範囲識別子です。コンピュータ科学の法律では、$を使うことができれば、$や$よりも最適化されると言います – Sammaye

答えて

15

MongoDBのドキュメントはthe answerを持っている:

「同じフィールドの値の等価性チェックです<表現>と$またはを使用する場合は、$またはオペレータを介してオペレータで$を選択してください。」

1

"$または"は常に有効ですが、クエリオプティマイザ をより効率的に処理するため、可能な限り "$ in"を使用してください。

さらに、 "$ in"は読みやすくなっています。

参考:MongoDBの:Definitive Guideの

0

$orオペレータは、あなた自身のログインを定義することができますが、$inオペレータはあなたがロジックにあなたを置くことができないと比較でき比較演算子で論理演算子です。

$inの構文:

{ field: { $in: [<value1>, <value2>, ... <valueN> ] } } 

例:

db.account.find({ qty: { $in: [ 5, 15 ] } }) 
$or

の構文:

{ $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] } 

例:

db.account.find({ $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] }) 

注:アカウントはあなたのコレクションの名前です