如何使用 Cypher select 特定的重叠模式?

How to select specific overlapping pattern using Cypher?

我在 Neo4j 中有一个包含节点和关系的数据集。像这样:

(a)-[r:sel]-(x)
(a)-[r:sel]-(y)
(a)-[r:sel]-(z)
(a)-[r:sel]-(w)
(b)-[r:sel]-(z) 
(b)-[r:sel]-(y)
(c)-[r:sel]-(z)

节点 x、y、z 和 w 具有带属性的标签 DEP(例如:DEP.type)。 y 和 z 具有相同的 属性(DEP.type 定义相同)。

我想要 select 只是像 (b) 这样的节点,而不是像 (a) 这样的节点。
换句话说,只有下面写的区域中的节点:

有人有什么建议吗? 最良好的祝愿,

场景 1

此查询returns与asel关系的所有节点的集合,当且仅当该集合有多个节点且所有节点都具有相同的type 值。

MATCH (a)-[r:sel]-(x)
WITH a, COLLECT(x) AS col, LENGTH(COLLECT(DISTINCT x.type)) AS numTypes 
WHERE numTypes = 1 AND LENGTH(col) > 1
RETURN a, col;

场景 2

此查询returns与asel关系的所有节点的集合,当且仅当集合有多个节点且整个集合有指定的属性 具有指定值(在此示例中,type = foo)。

MATCH (a)-[r:sel]-(x)
WHERE x.type = 'foo'
WITH a, COLLECT(x) AS col
WHERE LENGTH(col) > 1
RETURN a, col;