假设我的表格中包含以下键的文档:
name, created_at, [likes_to_eat], [likes_to_drink]
括号内的键是可选的(可能在文档中也可能不在文档中)。
我想从此表中获取不具有likes_to_eat
和likes_to_drink
密钥的所有文档。我在文档中发现我能做到这一点:
r.table('users').filter(
lambda user: not user.has_fields('likes_to_eat', 'likes_to_drink')
).run(conn)
但是has_fields
在键之间放置一个AND,而我需要一个OR(因此过滤用户是否还没有likes_to_eat
或likes_to_drink
或两者都是。 / p>
我该怎么做?
答案 0 :(得分:2)
r.table('users').filter(
lambda user: ~user.has_fields('likes_to_eat', 'likes_to_drink')
).run(conn)
编辑:犯了一个错误并使用contains而不是has_fields。
答案 1 :(得分:1)
似乎我比我想象的更近。我拒绝使用not
而不是~
(就像@neumino建议的那样)。所以这是工作片段:
r.table('users').filter(
lambda user: ~user.has_fields('likes_to_eat', 'likes_to_drink')
).run(conn)
has_fields
实际上在给定的参数之间放置了一个OR。