さまざまな種類のドキュメントで機能する一般的なクエリを作成することはできますか? たとえば、「ケース」と「工場」があり、それらには異なるフィールドのセットがあります。例えば:
{
id: 'case_o1',
name: 'Case numero uno',
amount: 40
}
{
id: 'factory_002',
location: 'Venezuela',
workers: 200,
operating: true
}
エンティティのタイプ (ケースまたはファクトリ) と追加のパラメーターを渡し、それらに基づいて結果をフィルター処理する一般的なクエリを作成することは可能ですか? もちろん、JavaScript ビューを使用することもできますが、複数のフィールドでフィルター処理することはできません。ベネズエラにある、従業員数が 20 から 55 のすべての工場を取得したいとします。
私はこれで始めましたが、行き詰まりました:
select * from `mybucket` as entity
where position(meta(entity).id, $entity_type) == 0
複数の述語を渡し、クエリでそれらを認識させるにはどうすればよいですか?
もちろん、次のようにフィールドを一覧表示できます。
where position(meta(entity).id, $entity_type) == 0
and entity.location == 'Venezuela'
and entity.workers > $workers_min
and entity.workers < $workers_max
しかしその後
- エンティティごとに個別のクエリを作成する必要があります
- それでも私の問題は解決しません - 述語を無視する方法がわかりません.次回 $workers_min と $workers_max が渡されなかった場合、述語 (列) ごとにクエリを作成する必要がありますか?
- セキュリティ上の理由から、自由形式のクエリを生成して Couchbase サーバーに渡すことはできません。すべてのクエリは既にデータベースに保存されており、API はドキュメントからクエリを取得して実行するだけです。
WHERE $location IS MISSING OR entity.location == $location
未定義の引数(たとえば、またはそのようなもの)に対して「短絡」するクエリを作成することは可能だと思います
任意のパラメータに基づいてデータセットを効果的にフィルタリングおよび順序付けできるクエリを作成することはまったく可能ですか? それとも仕方がない?