Neo4j:"does not contain" 个查询
Neo4j: "does not contain" queries
我正在尝试查找性别不包含字符串 "male" 的所有用户。我希望这个查询的结果是那些没有指定性别的用户。
用户和性别是独立的节点,连接方式如下:
(user node) - [:gender] -> (gender node)
对部分用户来说,性别关系不存在
我运行这个查询:
MATCH (g:genders)
WHERE g.gender =~ ".*male.*"
WITH g MATCH (u:users)
WHERE NOT (u)-[:gender]->(g)
RETURN COUNT(u);
这个查询的问题是它 returns 我数据库中的所有用户,因为 WHERE NOT 子句正在做 OR 比较而不是 AND 即它正在查找所有性别不是男性的用户女性,这是我数据库中的所有用户。
如何使其成为 AND 查询?我想要一个不假设结束节点(在本例中为性别节点)始终只有两个可能值的解决方案。
此查询是否符合您的预期?
MATCH (u:user)
WITH COLLECT(u) AS cu
UNWIND cu AS u
MATCH (u)-[:gender]->(g:gender) WHERE g.gender =~ ".*male.*"
WITH cu, COLLECT(u) AS cv
RETURN REDUCE(s=[], x IN cu | CASE WHEN NOT x IN cv THEN s + x ELSE s END) AS result;
它会从用户总数中删除性别包含 "male" 的用户。
我正在尝试查找性别不包含字符串 "male" 的所有用户。我希望这个查询的结果是那些没有指定性别的用户。
用户和性别是独立的节点,连接方式如下:
(user node) - [:gender] -> (gender node)
对部分用户来说,性别关系不存在
我运行这个查询:
MATCH (g:genders)
WHERE g.gender =~ ".*male.*"
WITH g MATCH (u:users)
WHERE NOT (u)-[:gender]->(g)
RETURN COUNT(u);
这个查询的问题是它 returns 我数据库中的所有用户,因为 WHERE NOT 子句正在做 OR 比较而不是 AND 即它正在查找所有性别不是男性的用户女性,这是我数据库中的所有用户。
如何使其成为 AND 查询?我想要一个不假设结束节点(在本例中为性别节点)始终只有两个可能值的解决方案。
此查询是否符合您的预期?
MATCH (u:user)
WITH COLLECT(u) AS cu
UNWIND cu AS u
MATCH (u)-[:gender]->(g:gender) WHERE g.gender =~ ".*male.*"
WITH cu, COLLECT(u) AS cv
RETURN REDUCE(s=[], x IN cu | CASE WHEN NOT x IN cv THEN s + x ELSE s END) AS result;
它会从用户总数中删除性别包含 "male" 的用户。