我有两个这样构建的图表:
CREATE (level1a:Bug {name: 'a'})
CREATE (level1b:Bug {name: 'b'})
CREATE (level2c:Bug {name: 'c'})
CREATE (level2d:Bug {name: 'd'})
CREATE (level3e:Bug {name: 'e'})
CREATE (level3f:Bug {name: 'f'})
CREATE (level3g:Bug {name: 'g'})
CREATE (level3h:Bug {name: 'h'})
CREATE (level1a)-[:LINK]->(level2c)
CREATE (level1b)-[:LINK]->(level2d)
CREATE (level2c)-[:LINK]->(level3e)
CREATE (level2c)-[:LINK]->(level3f)
CREATE (level2d)-[:LINK]->(level3g)
CREATE (level2d)-[:LINK]->(level3h)
此处也可以:http://console.neo4j.org/?id=duplicate_bug2
执行查询时:
MATCH (a:Bug {name: 'a'})-[:LINK]->()-[:LINK]->(end) return end
我得到了预期的两个节点(f和e)。但如果我这样做两个匹配查询:
MATCH (a:Bug {name: 'a'})-[:LINK]->()-[:LINK]->(end)
MATCH (b:Bug {name: 'b'})-[:LINK]->()-[:LINK]->(end2)
return end, end2
我在end和end2中获得重复节点。为什么是这样?这两个图甚至没有连接!
BR, 小号
答案 0 :(得分:0)
由于两个匹配都将返回多行,并且两个匹配语句之间没有相关性,因此它将生成两个结果集的叉积。在这种情况下,它是2x2,因此每个节点都有四行每个节点。
我认为你所追求的是这样的查询。它从第一个匹配中找到所有结尾,将它们组合在一个集合中,然后为第二个匹配重复该过程。然后它返回结果集中的一行,其中包含b
的所有末尾和MATCH (a:Bug {name: 'a'})-[:LINK]->()-[:LINK]->(end)
with collect(end) as end
MATCH (b:Bug {name: 'b'})-[:LINK]->()-[:LINK]->(end2)
return end, collect(end2) as end2
的所有末尾,而不管每次匹配结束时有多少。
.col-center {
float: none;
margin: 0 auto;
}
<div class="col-md-7 col-center">