无法在 Cypher 中显示具有多个传入关系的匹配节点的路径
Can't display paths for matched nodes with multiple incoming relationships in Cypher
我有一个基于此模式的 Neo4j 图:(:Entity)-[:HAS_VALUE]->(:Value)-[:HAS_SYNONYM]->(:Synonym)
。
每个实体可以有多个值,每个值可以有多个同义词。我正在寻找不明确的同义词 -- 连接了 1 个以上值节点的同义词节点。
我可以找到有问题的同义词节点如下:
MATCH ()-[r:HAS_SYNONYM]->(n) WITH n, count(r) as num_values WHERE num_values > 1 RETURN n
但是,当我尝试显示路径(以便我可以看到与违规值的互连)时,浏览器给我“(无更改,无记录)”。以下是我尝试过的一些查询:
MATCH (n1:Value)-[r:HAS_SYNONYM]->(n2:Synonym) WITH n1, n2, r, count(r) as num_values WHERE num_values > 1 RETURN n1, r, n2
MATCH (n1)-[r:HAS_SYNONYM]->(n2) WITH n1, n2, r, count(r) as num_values WHERE num_values > 1 RETURN n1, r, n2
MATCH p = (n)-[r:HAS_SYNONYM]->() MATCH (n)-[r:HAS_SYNONYM]->() WITH p, n, count(r) as num_values WHERE num_values > 1 RETURN nodes(p)
是我的语法有误,还是更基础?
您的查询的问题是 WITH
命令。当我们写
WITH n1, n2, r, count(r)
,计数是针对 n1
、n2
和 r
的每个不同组合计算的,它们始终为 1,因此您看不到任何变化,没有记录。
尝试先按 n2
个节点计算计数,然后用 count > 1
过滤同义词,然后获取这些同义词的路径。
像这样:
MATCH (:Value)-[r:HAS_SYNONYM]->(n2:Synonym) WITH n2, count(r) as num_values WHERE num_values > 1
MATCH (n2)<-[rel:HAS_SYNONYM]-(v:Value)
RETURN v, rel, n2
我有一个基于此模式的 Neo4j 图:(:Entity)-[:HAS_VALUE]->(:Value)-[:HAS_SYNONYM]->(:Synonym)
。
每个实体可以有多个值,每个值可以有多个同义词。我正在寻找不明确的同义词 -- 连接了 1 个以上值节点的同义词节点。
我可以找到有问题的同义词节点如下:
MATCH ()-[r:HAS_SYNONYM]->(n) WITH n, count(r) as num_values WHERE num_values > 1 RETURN n
但是,当我尝试显示路径(以便我可以看到与违规值的互连)时,浏览器给我“(无更改,无记录)”。以下是我尝试过的一些查询:
MATCH (n1:Value)-[r:HAS_SYNONYM]->(n2:Synonym) WITH n1, n2, r, count(r) as num_values WHERE num_values > 1 RETURN n1, r, n2
MATCH (n1)-[r:HAS_SYNONYM]->(n2) WITH n1, n2, r, count(r) as num_values WHERE num_values > 1 RETURN n1, r, n2
MATCH p = (n)-[r:HAS_SYNONYM]->() MATCH (n)-[r:HAS_SYNONYM]->() WITH p, n, count(r) as num_values WHERE num_values > 1 RETURN nodes(p)
是我的语法有误,还是更基础?
您的查询的问题是 WITH
命令。当我们写
WITH n1, n2, r, count(r)
,计数是针对 n1
、n2
和 r
的每个不同组合计算的,它们始终为 1,因此您看不到任何变化,没有记录。
尝试先按 n2
个节点计算计数,然后用 count > 1
过滤同义词,然后获取这些同义词的路径。
像这样:
MATCH (:Value)-[r:HAS_SYNONYM]->(n2:Synonym) WITH n2, count(r) as num_values WHERE num_values > 1
MATCH (n2)<-[rel:HAS_SYNONYM]-(v:Value)
RETURN v, rel, n2