1

これが私が1つの特定の要素を照会しようとした方法です。

results << read_db.collection("users").find(:created_at => {:$gt => initial_date}).to_a

現在、複数のクエリを実行しようとしています。

db.inventory.find({ $and: [ { price: 1.99 }, { qty: { $lt: 20 } }, { sale: true } ] } )

では、どうすればクエリを作成できますか?基本的に、ifステートメントがたくさんあります。trueの場合、クエリを拡張したいと思います。別の言語で.extendコマンドがあると聞きましたが、ルビーにも同様のコマンドがありますか?

基本的に私はこれをしたい:

if price
query = "{ price: 1.99 }"
end

if qty
query = query + "{ qty: { $lt: 20 } }"
end

そしてただ持っているより

 db.inventory.find({ $and: [query]})

この構文は間違っています、これを行うための最良の方法は何ですか?

4

1 に答える 1

4

あなたは次のようなものになりたいです:

db.inventory.find({ :$and => some_array_of_mongodb_queries})

ハッシュロケット構文に切り替えたことに注意してください。ラベルではないシンボルでJavaScript表記を使用することはできません。の値は:$and、文字列の配列ではなく、個々のクエリの配列である必要があります。したがって、配列を作成する必要があります。

parts = [ ]
parts.push(:price => 1.99)         if(price)
query.push(:qty => { :$lt => 20 }) if(qty)
#...
db.inventory.find(:$and => parts)

ところで、いくつかの浮動小数点の問題が発生する可能性があり:price => 1.99ます。おそらくそのために整数を使用し、ドルではなくセントで作業する必要があります。空ではないある種のチェックもparts良い考えかもしれません。

于 2012-12-09T20:13:49.583 に答える