3

我希望有人确认创建以下查询的正确方法。文档中充满了简单的查询示例,但一些中等复杂度的示例会很有用——以便了解最佳实践。

我可以使用如下查询进行过滤:

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

可以使用 ReQL lambda 简写以这种方式编写相同的查询:

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)

编写此查询以使用两个filter调用的正确方法是什么?

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)

通常你有一个你想要过滤的值的字典,而不是模拟值作为接受的答案。默认情况下,如果某些参数设置为空,它将过滤空值。这个不这样做,只是过滤字典中存在的那些

于 2015-03-27T19:14:32.227 回答