如何过滤没有密钥列表的文档?

时间:2015-02-15 13:05:16

标签: rethinkdb

假设我的表格中包含以下键的文档:

name, created_at, [likes_to_eat], [likes_to_drink]

括号内的键是可选的(可能在文档中也可能不在文档中)。

我想从此表中获取不具有likes_to_eatlikes_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_eatlikes_to_drink或两者都是。 / p>

我该怎么做?

2 个答案:

答案 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。