0

我试图弄清楚如何使用 MongoID 嵌套 AND 和 OR 操作,就像这样(取自我曾经与 MongoMapper 一起使用的东西):

{
:$and=> [
    {
        :$or => [
            {"name"=> "joe"}, {"name" => "randy" }
    {
        :$or=> [
            {"something" => "else" }, {"another" => "thing" }
        ]
    }
]
}

我不太熟悉联合和交叉的工作方式,但更重要的是其中的每个孩子AND都是可选的/不保证的。换句话说,其中的每个查询AND都是程序化的,可能有 2 个要检查的项目、1 个项目等。

我想过做这样的事情:

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

但是,唯一的问题是我不确定基于用户输入构建查询的最佳实践。我有一个基于 sinatra 的应用程序,它充当连接到我的 MongoID 模型的用户的 API 点,我希望用户能够通过 API 构建这样的查询(也许并不复杂)。

由于各种原因,我从 MongoMapper 迁移到 MongoID,但是使用 MongoMapper,这些查询稍微简单一些,因为方法中支持所有内容,例如嵌套andor运算符where

4

1 回答 1

1

事实证明,MongoID(好吧,更具体地说是 Origin::Query)在其许多 DSL 函数中支持 Mongo 选择器语法,如下所示:

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

所以从我上面的例子中收集,你可以这样做:

Model.all_of(    [
    {
        "$or" => [
            {"name"=> "joe"}, {"name" => "randy" }
    },
    {
        "$or" => [
            {"something" => "else" }, {"another" => "thing" }
        ]
    }
]
于 2012-12-18T09:15:56.833 回答