3

以下のクエリを作成する正しい方法を誰かに確認してもらいたいです。ドキュメントにはクエリの簡単な例がたくさんありますが、中程度の複雑さの例は、ベスト プラクティスを知るために役立ちます。

次のようなクエリでフィルタリングできます。

r.table('backups').filter(
    {'verified': True}
).run(conn)

ReQL ラムダの短縮形を使用して、同じクエリをこのように書くことができます。

r.table('backups').filter(
    r.row['verified'] == True
).run(conn)

次に、このクエリに別のフィルターを追加しようとしましたが、正しい結果が返されませんでした。

r.table('backups').filter(
    r.row['verified'] == True and r.row['id'].match("^aad")
).run(conn)

filter2 つの呼び出しを使用するために、このクエリを記述する正しい方法はありますか?

r.table('backups').filter(
    r.row['verified'] == True
).filter(
    r.row['id'].match("^aad")
).run(conn)
4

2 に答える 2

6

Python のand演算子は RethinkDB クエリ言語に変換されません。&代わりに次を使用する必要があります。

r.table('backups').filter(
  (r.row['verified'] == True) & r.row['id'].match("^aad")
).run(conn)
于 2013-09-20T06:23:32.343 に答える
1

実際、これが最善のアプローチです。

r.table('backups').filter(
  (doc['verified'] == _filters.get('verified') if _filters.has_key("verified") else doc['verified']) & \
  (doc['id'] == _filters.get('id') if _filters.has_key("id") else doc['id'])
).run(conn)

通常、受け入れられた回答として値をモックするのではなく、フィルタリングする値の辞書があります。デフォルトでは、一部のパラメーターが null に設定されている場合、null 値がフィルター処理されます。これはそうしません。辞書に存在するものをフィルタリングするだけです

于 2015-03-27T19:14:32.227 に答える