如何过滤没有键列表的文档?
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_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
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
实际上在给定的参数之间放置一个或。
假设我有一个 table,文档的键如下:
name, created_at, [likes_to_eat], [likes_to_drink]
方括号之间的键是可选的(文档中可能有也可能没有)。
我想从此 table 中获取所有没有 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
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
实际上在给定的参数之间放置一个或。