2011-10-14 13 views
5

は私がその文書を読んでいます:http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24modMongoDBの高速クエリのJavascript

$mod 

$ MOD演算子を使用すると、句のための一般的なケースを交換するために、高速剰余クエリを行うことができます。たとえば、次の$どこの問合せ:だから私はfastがここで何を意味するのか理解していなかった

db.things.find({ a : { $mod : [ 10 , 1 ] } }) 

db.things.find("this.a % 10 == 1") 

を置き換えることができます。パフォーマンス?

答えて

3

私はこれをベンチマークしていませんが、実際にはパフォーマンスを意味します。明らかに "$ where"は各オブジェクトのjavascriptを実行しますが、 "$ mod"はmongodbネイティブ演算子です。オブジェクトごとにjavascriptを実行する必要がないため、はるかに高速になります。

Javascript executes more slowly than the native operators listed on this page, 
but is very flexible. 

http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-JavascriptExpressionsand%7B%7B%24where%7D%7D

+0

あなたは@Andrew Orsichのインデックス答えについてどんな考えを持っていますか? – kamaci

+0

javascriptのクエリでは、クエリで選択されたオブジェクトごとにjavascriptを評価する必要があるため、インデックスを使用することはできません。だから、* $ mod *とjavascriptのような組み込み演算子の間に選択肢があれば、javascriptは各オブジェクト*と*に対して評価されるので、常に遅くなるはずです。組み込み演算子はインデックスを使用できません。演算子は、クエリがmongodb *によって解析されたときにのみ評価され、*はインデックスを使用できます。これをベンチマークすることはおそらく興味深いでしょう。 – aurora

+0

あなたの答えをありがとう。もう一回。インデックス作成の意味はどこからでも読み取ることができますか?私は何がわからないと思う。 – kamaci

1

MongoDBの中の任意の正規表現/ javascriptのクエリがインデックスを使用してゆっくりと動作しないことができます。また、ドキュメントから次の文を見てみましょう。ですからあなたの質問に対する答えは「はい」です。あなたが見つけることができるのJavaScriptサーバ側について

詳細情報here

関連する問題