match (rootTk:Toolkit {level: "Level 0"})<-[:PrimaryChild*]-(tk:Toolkit)<-[:visitTo]-(hit:PageHit)
return rootTk.title, count(hit.id)
在这种情况下,每个rootTk代表工具包树的根。我想返回与每棵树相关的点击次数。上面的查询接近我想要的,但它不包括与每棵树的根相关的命中,只包括它的子项。
如何将模式的<-[:visitTo]-(hit:PageHit)
部分与子工具包和关联的根工具包相关联?
答案 0 :(得分:1)
虽然可选匹配可以解决问题,但更简单的解决方案是使用零作为路径长度范围内的起点。这包括树中的根项。
MATCH(rootTk:Toolkit {level:&#34; Level 0&#34;})&lt; - [:PrimaryChild * 0 ..] - (tk:Toolkit)&lt; - [:visitTo] - (点击: PageHit) 将rootTk.title作为标题返回,将COUNT(hit.id)作为Hits
返回答案 1 :(得分:0)
编辑 - 吉姆的回答 对于这个问题,Jim有更好的答案,任何找到这个问题的人都应该使用。
MATCH (rootTk:Toolkit {level: "Level 0"})<-[:PrimaryChild*0..]-(tk:Toolkit)<-[:visitTo]-(hit:PageHit)
RETURN rootTk.title as Title,COUNT(hit.id) as Hits
它使用0长度(到无穷大)路径匹配,以使PrimaryChild关系成为非强制性。
原始答案
MATCH (rootTk:Toolkit {level: "Level 0"})<-[:PrimaryChild*]-(tk:Toolkit)<-[:visitTo]-(hit:PageHit)
RETURN rootTk.title, COUNT(hit)
正如你所说,这将仅返回tk节点上的命中,以获得根目录上的命中我认为这将起作用:
MATCH (rootTk:Toolkit {level: "Level 0"})
OPTIONAL MATCH (rootTk)<-[:PrimaryChild*]-(tk:Toolkit)<-[:visitTo]-(hit:PageHit)
WITH rootTk, COUNT(hit) as hits
OPTIONAL MATCH (rootTk)<-[:visitTo]-(rootHit:PageHit)
RETURN rootTk.title, hits + COUNT(rootHit)
它分两个阶段执行计数并添加值,我不确定在没有修改模型的情况下,可以在单个阶段中执行此操作。
我想你可以做到这一点,但你可能会爆炸:
MATCH (rootTk:Toolkit {level: "Level 0"})
OPTIONAL MATCH (rootTk)<-[*]-(hit:PageHit)
RETURN rootTk.title, COUNT(hit)