Neo4j cypher - 比较两个集合以获得至少一个相同的元素

时间:2014-04-19 20:15:47

标签: collections neo4j cypher

我想返回我关注的所有不属于我所在群组成员的用户。如果被关注的用户是我所在的甚至一个群组的成员,则不应该被退回。

然而,我收到一个错误:

None.get

Neo.DatabaseError.Statement.ExecutionFailure

当我尝试这个查询时:

MATCH (g1:groups)<-[:MEMBER_OF]-(u1:users{userid1:"56"})-[:FOLLOWS]->(u2:users)-[:MEMBER_OF]->(g2:groups)
WITH collect(g1.groupid) AS my_groups,u2,collect(g2.groupid) AS foll_groups
WHERE NOT any(t in foll_groups WHERE t IN extract(x IN my_groups))
RETURN u2

1 个答案:

答案 0 :(得分:3)

这是一个解决方案:

MATCH (g1:groups)<-[:MEMBER_OF]-(u1:users { userid1:"56" })-[:FOLLOWS]->(u2:users)-[:MEMBER_OF]->(g2:groups)
WITH u2, collect(g2) AS foll_groups, collect(g1) AS my_groups
WITH u2, reduce(dup = FALSE, g IN foll_groups | (dup OR g IN my_groups)) AS has_dup
WHERE NOT has_dup
RETURN u2;