这就是我要查询一个特定元素的方法。
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语句,如果是,我想扩展我的查询。我听说在另一个语言中有一个.extend命令,ruby中有类似的东西吗?
基本上我想这样做:
if price
query = "{ price: 1.99 }"
end
if qty
query = query + "{ qty: { $lt: 20 } }"
end
而不仅仅是
db.inventory.find({ $and: [query]})
这种语法错了,这样做的最佳方法是什么?
答案 0 :(得分:4)
你希望最终得到这样的东西:
db.inventory.find({ :$and => some_array_of_mongodb_queries})
请注意,我已切换到hashrocket语法,您不能使用带有非标签符号的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
不为空的检查也可能是一个好主意。