Ruby on rails 使用rails构建Mongo查询?怎么用?

Ruby on rails 使用rails构建Mongo查询?怎么用?,ruby-on-rails,ruby,mongodb,Ruby On Rails,Ruby,Mongodb,这就是我如何查询一个特定元素的方法 results << read_db.collection("users").find(:created_at => {:$gt => initial_date}).to_a 现在我如何建立我的查询?基本上我会有一堆if语句,如果为true,我想扩展我的查询。我听说在另一种语言中有一个.extend命令,ruby中有类似的东西吗 基本上我想这样做: if price query = "{ price: 1.99 }" end if

这就是我如何查询一个特定元素的方法

results << read_db.collection("users").find(:created_at => {:$gt => initial_date}).to_a
现在我如何建立我的查询?基本上我会有一堆if语句,如果为true,我想扩展我的查询。我听说在另一种语言中有一个.extend命令,ruby中有类似的东西吗

基本上我想这样做:

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

if qty
query = query + "{ qty: { $lt: 20 } }"
end
而不仅仅是拥有

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

此语法错误,执行此操作的最佳方式是什么?

您希望以以下方式结束:

db.inventory.find({ :$and => some_array_of_mongodb_queries})
请注意,我已经切换到hashrocket语法,您不能将JavaScript符号与非标签的符号一起使用。
:$和
的值应该是单个查询的数组,而不是字符串数组;因此,您应该构建一个数组:

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

顺便说一句,您可能会在
中遇到一些浮点问题:price=>1.99
,您可能应该使用整数,并以美分而不是美元计算。检查
部分是否为空也可能是一个好主意。

您希望以这样的方式结束:

db.inventory.find({ :$and => some_array_of_mongodb_queries})
请注意,我已经切换到hashrocket语法,您不能将JavaScript符号与非标签的符号一起使用。
:$和
的值应该是单个查询的数组,而不是字符串数组;因此,您应该构建一个数组:

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

顺便说一句,您可能会在
中遇到一些浮点问题:price=>1.99
,您可能应该使用整数,并以美分而不是美元计算。检查
零件是否为空也可能是个好主意。

快速提问。如何推送空查询$并且不能只有一个或没有entries如果
零件为空?
则您没有任何可搜索的内容,如果
零件.size==1
则您可以跳过
:$和
并直接使用
零件。首先
直接:
db.inventory.find(parts.first)
。非常感谢。我怎么说搜索全部?如果为空,则搜索所有。到目前为止,所有这些都有效!我取得了很大的进步,再次感谢。您应该能够说
db.inventory.find()
,以获得所有这些。快速问题。如何推送空查询$并且不能只有一个或没有entries如果
零件为空?
则您没有任何可搜索的内容,如果
零件.size==1
则您可以跳过
:$和
并直接使用
零件。首先
直接:
db.inventory.find(parts.first)
。非常感谢。我怎么说搜索全部?如果为空,则搜索所有。到目前为止,所有这些都有效!我取得了很大的进步,再次感谢。您应该能够说
db.inventory.find()
来获取所有这些。