Neo4j:“不包含”查询

时间:2015-02-27 15:53:48

标签: neo4j

我正在尝试查找性别不包含字符串"男性"的所有用户。我希望此查询的结果是那些未指定性别的用户。

用户和性别是单独的节点,如下所示连接:

(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);

这个查询的问题是它返回我数据库中的所有用户,因为WHERE NOT子句正在进行OR比较而不是AND,即它找到所有性别不是男性或不是女性的用户,这是所有用户在我的数据库中。

如何将其作为AND查询?我想要一个不假设结束节点(在本例中是性别节点)总是只有两个可能值的解决方案。

1 个答案:

答案 0 :(得分:2)

此查询是否符合您的意图?

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;

删除包含"男性"的性别的用户来自用户总数。