私はMongoDBとRubyドライバーとMongoid、そして行を使用しています
db.things.find({j: {$ne: 3}, k: {$gt: 10} });
とても奇妙で覚えにくいようです。パーサーを使用しないのはなぜですか。
db.things.find("j != 3 && k > 10")
自動的に目的の形式に変換できるのはどれですか?(または内部で使用する形式)。
別の方法として、流暢なインターフェースを備えたクエリビルダーを実装することはそれほど難しくありません。Rubyドライバーにすでに含まれているかどうかはわかりませんが、Javaバージョンには含まれています
DBObject condObj =
QueryBuilder.start("numberOfPageHits").greaterThan(10)
.and("name").regex(regExp).get();
MongoDBは、ステートメントでJavaScript式をfind()
サポートしています。次の点に注意してください。
Javascriptは、ネイティブ演算子[...]よりも実行速度が遅くなりますが、非常に柔軟性があります。
JavaScript式の文字列は、実際のJavaScriptに1回解析され、ドキュメントごとに評価されます。
ただし、JavaScriptは。などのネイティブ演算子には変換されません{ $ne: 3 }
。これは、すべてのJavaScriptをネイティブ演算子を使用して表現できるわけではないためです。
式をネイティブ演算子に変換できないため、(おそらく)使用するインデックスもわかりません。その結果、JavaScript式はネイティブ演算子よりも多少遅くなる可能性があります。
http://github.com/RedBeard0531/MongoMagicをご覧ください。Pythonで書かれていますが、rubyに簡単に翻訳できるはずです。クエリは次のようになります。
db.things.find(AND( M.j != 3 , M.k > 10 ))