2012-12-17 68 views
0
操作

我試圖找出一個如何嵌套AND和OR操作與MongoID,像這樣(從東西,我使用MongoMapper使用拍攝)我並不太熟悉工會和十字路口的工作方式,但啓發者是AND內的每個孩子都是可選/不能保證的。換句話說,內AND是綱領性的每個查詢,可能有2項覈對,1項等嵌套AND和OR與MongoID

我想過做這樣的事情:

Model.or({ :name => "...." }).union.or(:something => "...." }) 

不過,唯一的問題那就是我不確定基於用戶輸入構建查詢的最佳實踐。我有一個基於sinatra的應用程序,作爲連接到我的MongoID模型的用戶的API點,我希望用戶能夠通過API構建像這樣的查詢(可能不是那麼複雜)。

我從MongoMapper遷移到MongoID出於各種原因,但與MongoMapper這些查詢都有些簡單,因爲一切,比如嵌套andor運營商,是一個where方法中的支持。

回答

1

原來,MongoID(當然,更具體地:: Query)的支持範圍內它們的許多DSL功能蒙戈選擇語法,就像這樣:

Model.where( { "name" => { "$or" => [ "betsy", "charles" ] } ) 

所以從我上面的例子中收集,你可以做這個:

Model.all_of( [ 
    { 
     "$or" => [ 
      {"name"=> "joe"}, {"name" => "randy" } 
    }, 
    { 
     "$or" => [ 
      {"something" => "else" }, {"another" => "thing" } 
     ] 
    } 
]