0

私はMongoDBとRubyドライバーとMongoid、そして行を使用しています

db.things.find({j: {$ne: 3}, k: {$gt: 10} });

とても奇妙で覚えにくいようです。パーサーを使用しないのはなぜですか。

db.things.find("j != 3 && k > 10")

自動的に目的の形式に変換できるのはどれですか?(または内部で使用する形式)。

4

3 に答える 3

2

別の方法として、流暢なインターフェースを備えたクエリビルダーを実装することはそれほど難しくありません。Rubyドライバーにすでに含まれているかどうかはわかりませんが、Javaバージョンには含まれています

DBObject condObj =
   QueryBuilder.start("numberOfPageHits").greaterThan(10)
      .and("name").regex(regExp).get();
于 2010-09-25T08:15:38.487 に答える
1

MongoDBは、ステートメントでJavaScript式をfind()サポートしています。次の点に注意してください。

Javascriptは、ネイティブ演算子[...]よりも実行速度が遅くなりますが、非常に柔軟性があります。

JavaScript式の文字列は、実際のJavaScriptに1回解析され、ドキュメントごとに評価されます。

ただし、JavaScriptは。などのネイティブ演算子には変換されません{ $ne: 3 }これは、すべてのJavaScriptをネイティブ演算子を使用して表現できるわけではないためです。

式をネイティブ演算子に変換できないため、(おそらく)使用するインデックスもわかりません。その結果、JavaScript式はネイティブ演算子よりも多少遅くなる可能性があります。

于 2010-09-25T07:12:49.360 に答える
1

http://github.com/RedBeard0531/MongoMagicをご覧ください。Pythonで書かれていますが、rubyに簡単に翻訳できるはずです。クエリは次のようになります。

db.things.find(AND( M.j != 3 , M.k > 10 ))
于 2010-09-26T17:52:56.683 に答える