如何使用 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与a
有sel
关系的所有节点的集合,当且仅当该集合有多个节点且所有节点都具有相同的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与a
有sel
关系的所有节点的集合,当且仅当集合有多个节点且整个集合有指定的属性 具有指定值(在此示例中,type = foo
)。
MATCH (a)-[r:sel]-(x)
WHERE x.type = 'foo'
WITH a, COLLECT(x) AS col
WHERE LENGTH(col) > 1
RETURN a, col;
我在 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与a
有sel
关系的所有节点的集合,当且仅当该集合有多个节点且所有节点都具有相同的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与a
有sel
关系的所有节点的集合,当且仅当集合有多个节点且整个集合有指定的属性 具有指定值(在此示例中,type = foo
)。
MATCH (a)-[r:sel]-(x)
WHERE x.type = 'foo'
WITH a, COLLECT(x) AS col
WHERE LENGTH(col) > 1
RETURN a, col;