获取Neo4j Cypher中第二跳可选匹配节点的计数

获取Neo4j Cypher中第二跳可选匹配节点的计数,neo4j,graph-databases,Neo4j,Graph Databases,我试过这个: START u=node(25) MATCH u-[p:captains]-(b:Boat) OPTIONAL MATCH b-[r:sails]-(s:Sea) OPTIONAL MATCH b-[p1:rides]-(u1:Person) WHERE p1.prop = 'foo' OPTIONAL MATCH b-[p2:rides]-(u2:Person) WHERE p2.prop = 'bar' OPTIONAL MATCH b-[p3:rides]-(u3

我试过这个:

 START u=node(25)
 MATCH u-[p:captains]-(b:Boat)
 OPTIONAL MATCH b-[r:sails]-(s:Sea)
 OPTIONAL MATCH b-[p1:rides]-(u1:Person) WHERE p1.prop = 'foo'
 OPTIONAL MATCH b-[p2:rides]-(u2:Person) WHERE p2.prop = 'bar'
 OPTIONAL MATCH b-[p3:rides]-(u3:Person) WHERE p3.prop = 'baz'
 RETURN b, count(s), count(u1), count(u2), count(u3)
不过,所有的计数都不正确。我期待着每一行的计数,从一个可选的匹配开始,伴随着每个“b”。有人帮忙吗?比如,3个海洋,2个乘客是富,5个是酒吧,等等

编辑:我感觉这更接近了,但还是错了

 START u=node(25)
 MATCH u-[p:captains]-(b:Boat)
 WITH b
 OPTIONAL MATCH b-[r:sails]-(s:Sea)
 OPTIONAL MATCH b-[p1:rides{prop:'foo'}]-(u1:Person)
 OPTIONAL MATCH b-[p2:rides{prop:'bar'}]-(u2:Person)
 OPTIONAL MATCH b-[p3:rides{prop:'baz'}]-(u3:Person)
 RETURN c, count(s), count(u1), count(u2), count(u3)

似乎给了我一些关于所有依赖b的计数…

答案是替换每个

count(


删除空值

实际上,还可以从多个路径匹配中删除多个uX的重复计数。
count(DISTINCT