我希望有人确认创建以下查询的正确方法。这些文档充满了简单的查询示例,但是一些中等复杂性的示例会很有用 - 以便了解最佳实践。
我可以使用以下查询进行过滤:
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)
答案 0 :(得分:6)
Python的and
运算符不会转换为RethinkDB查询语言。您必须改为使用&
:
r.table('backups').filter(
(r.row['verified'] == True) & r.row['id'].match("^aad")
).run(conn)
答案 1 :(得分: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,它将过滤空值。这个不会这样做,只是过滤掉dict中存在的那些