如何匹配具有指定关系中的1个以上的节点

时间:2019-04-30 15:34:22

标签: neo4j cypher

我正在尝试在Neo4j中查找所有指向其中的GOLDSOURCEFEED关系超过1个的Datum节点。而且我不在乎哪种类型的节点具有这种关系。这是基本查询,因此您可以看到节点变量等。

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

很显然,当我在上面的列表中输入时,我得到了所有具有GOLDSOURCEFEED关系的Datum节点,我希望对其进行优化以仅列出存在多个GOLDSOURCEFEED关系的地方。

2 个答案:

答案 0 :(得分:0)

我将关系的数量计为count(r),然后将此作为过滤1个以上GOLDSOURCEFEED的条件。

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

答案 1 :(得分:0)

您应该使用有效的程度检查:

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

度检查仅使用每个节点已经可用的数据,并且不需要实际获取路径。当您不关心关系的另一端的节点或任何关系属性时,可以执行度检查。