Neo4j Cypher多个节点间的关系

3
例如:

a-[r]->b之间有多个关系r,每个r.userId都是唯一的。
(例如:a-[r:R {userId:“user1”}]-> b,(a-[r:R {userId:“user2”}]-> b,
a-[r]->c也是相同的

然而,a-[r]->b的关系为:r.userId = amdin,但a-[r]->c没有此关系。

如何只返回c。

我尝试创建cypher:

"MATCH (a:SomeLabel)-[r:SomeR]->(any:SomeLable)"
"WHERE id(a)=0 AND r.userId <> \“admin\” "
"RETURN any";

但这也会返回b,因为a->b还有其他关系:r.userId = xxxx

如何编写cypher以返回不包括user.Id =“admin”的节点......

如果您不清楚我的意思,请告诉我....我需要您的帮助..谢谢

我画了一张图片,其中多个关系被命名为sr,但具有不同的属性(userId是唯一的),并且我想查找所有与节点A相关的节点,但不包含sr {userId:admin},我在那里添加了红色下划线。因此,在图片中,节点B具有关系sr {userId:admin},因此我只想返回节点C,而不是节点B。

enter image description here

2个回答

6
展示图形问题的简单表示,graphgists非常有帮助,因为人们可以探索数据。我已经根据您的描述创建了一个:http://gist.neo4j.org/?94ef056e41153b116e4f 针对您的问题,您可以收集每对节点中涉及到的所有用户名,并基于这些进行筛选:
MATCH (a { name:'A' })-[r:sr]->b
WITH a,b, collect(r.name) AS usernames
WHERE NOT 'admin' IN usernames
RETURN a, b

0

你的问题不太清楚。我的理解是,你想找到与节点 a 没有类型为 R 的关系连接的节点 c

基本上,你想进行一次负匹配,也就是搜索不存在的模式。可以使用 where not 来检索负模式:

MATCH (a:SomeLabel), (c:SomeLabel)
WHERE ID(a)=0 AND NOT (a)-[:R]->(c)
RETURN c

这将返回所有未连接到aSomeLabel节点列表。

请参阅参考手册中的http://docs.neo4j.org/chunked/stable/query-where.html#query-where-patterns


我添加了一张图片来更深入地解释我的问题,现在你能理解了吗? - Awakening

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接