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

How can I filter documents that don't have a list of keys?

假设我有一个 table,文档的键如下:

name, created_at, [likes_to_eat], [likes_to_drink]

方括号之间的键是可选的(文档中可能有也可能没有)。

我想从此 table 中获取所有没有 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_eat OR likes_to_drink OR 两者)。

我该怎么做?

r.table('users').filter(
    lambda user: ~user.has_fields('likes_to_eat', 'likes_to_drink')
).run(conn)

编辑:犯了一个错误,使用了 has_fields 的 intead。

似乎比我想象的要近。我正在否定使用 not 而不是 ~ (就像@neumino 建议的那样)。所以这是工作片段:

r.table('users').filter(
    lambda user: ~user.has_fields('likes_to_eat', 'likes_to_drink')
).run(conn)

has_fields 实际上在给定的参数之间放置一个或。