我试图弄清楚如何使用 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,这些查询稍微简单一些,因为方法中支持所有内容,例如嵌套and
和or
运算符where
。