neo4j 如何匹配具有多个指定关系的节点

d5vmydt9  于 2023-10-18  发布在  其他
关注(0)|答案(2)|浏览(141)

我试图找到Neo4j中所有有超过1个GOLDSourceFEED关系指向它的Datum节点。我不关心什么样的节点有关系。这里是基本查询,这样你就可以看到节点变量等。

MATCH (p:Datum)<-[:GOLDSOURCEFEED]-()
WHERE exists ( (p:Datum)<-[:GOLDSOURCEFEED]-() )
RETURN p.name

显然,当我在上面的列表中放置时,我得到了所有具有GOLDSourceFEED关系的Datum节点,我想将其细化为仅列出存在多个GOLDSourceFEED关系的节点。

9jyewag0

9jyewag01#

你应该使用一个有效的度检查:

MATCH (p: Datum)
WHERE SIZE((p)<-[:GOLDSOURCEFEED]-()) > 1 
RETURN p.name;

度检查只是使用每个节点已经可用的数据,而不需要实际获取路径。当您不关心关系另一端的节点或任何关系属性时,可以执行度检查。
[更新]
从neo4j 5.0开始,你可以使用一个degree子查询来进行度检查。举例来说:

MATCH (p: Datum)
WHERE COUNT{ (p)<-[:GOLDSOURCEFEED]-() } > 1 
RETURN p.name;

如上所述,如果COUNT子查询中的模式未指定关系的另一端,并且未指定任何关系属性,则这将获得p的度,而不会命中DB。

yi0zb3m4

yi0zb3m42#

我会把关系的数量记为count(r),然后把它作为一个条件来过滤超过1个GOLDSourceFEED。

MATCH (p: Datum) <- [r: GOLDSOURCEFEED] - ()  
WITH p,  count(r) as cnt 
WHERE cnt > 1 
RETURN p.name;

相关问题