私は動的にrethinkdbクエリをサーバー側に構築しようとしています。私は許容値のセットで、キーのセット内の各を渡す必要があり動的にrethinkdbクエリを構築する - python
r.db('test').table('data')
.filter(function (row) {
return row('subgroup').eq('x').or(row('subgroup').eq('y'))
.and(
.row('metric_id').eq('a')
.or(row('metric_id).eq('b')
.or(row('metric_id').eq('c'))
})
:最終目標は、(JavaScriptで)およそ次のように構成されているクエリを持つことです。上記の例では、私はsubgroup
がx
OR y
とmetric_id
がa
OR b
OR c
であるためにすべてのレコードを返す必要があります
{
'subgroup': ['x', 'y'],
'metric_id': ['a', 'b', 'c']
}
クエリに渡すと思います。
私はこれを行う正しい方法で苦労しています。
{
'entity_id': ['a', 'b'],
'metric_id': ['x']
}
rethink_filter
の入力で
def parse_filters(cls, filters):
def rethink_filter(data):
result = r.expr(True) # initialize filter function
for key in filters:
or_statements = []
for value in filters[key]:
f = {}
f[key] = value
or_statements.append(r.expr(f)) # build a list of
result = result.and_(r.or_(r.expr(or_statements)))
if not result:
break
return result
return rethink_filter
クエリを提供します:以下の1つの試みが参照
r.and_(r.and_(True, r.or_([{'entity_id': 'a'}, {'entity_id': 'b'}])), r.or_([{'metric_id': 'x'}]))
それは私が後だな結果を与えるべきのように見えたが、 entity_id
またはmetric_id
にかかわらず、テーブルのすべての項目を返します。
どこが間違っていますか?
RethinkDBはこれらの種類のクエリを実行できますが、構築/維持が難しく、インデックスレベルのパフォーマンスを最適化することが難しい場合があります。このため、Elasticsearchなどのテクノロジーをデータベースに統合することは、この種の検索ユースケースに適している可能性があります。 –