私は、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 => "...." })
ただし、これに関する唯一の問題は、ユーザー入力に基づいてクエリを作成するためのベストプラクティスがわからないことです。MongoIDモデルに接続しているユーザーのAPIポイントとして機能するsinatraベースのアプリケーションがあり、ユーザーがAPIを介してこのような(おそらくこれほど複雑ではない)クエリを構築できるようにしたいと考えています。
さまざまな理由でMongoMapperからMongoIDに移行していますが、MongoMapperでは、ネストされた演算子and
やor
演算子などのすべてがメソッド内でサポートされているため、これらのクエリは少し簡単になりましたwhere
。