[英]Count the number of Relationships between two specific Nodes - Neo4j / Cypher
[英]Count the number of relationships between a pair of nodes and set it as parameter in Neo4J
我有一个图表,其中一对节点之间可以有多种关系。 我想计算每对节点之间的这种关系,并将其设置为每个关系的参数。
我试过类似的东西:
MATCH (s:LabeledExperience)-[r:NextExp]->(e:LabeledExperience)
with s, e, r, length(r) as cnt
MATCH (s2:LabeledExperience{name:s.name})-[r2:NextExp{name:r.name}]->(e2:LabeledExperience{name: e.name})
SET r2.weight = cnt
但这将权重设置为始终为 1。 我也试过:
MATCH ()-[r:NextExp]->()
with r, length(r) as cnt
MATCH ()-[r2:NextExp{name:r.name}]->()
SET r2.weight = cnt
但这需要太多时间,因为有超过 90k 的关系并且没有索引(因为它们不可能在边缘上)。
由于您计数的方式,它们始终设置为 1。
当您按s, e, r
分组时,总是会产生一行。 但是,如果您为每个s, e
collect(r)
s, e
那么您将获得这两个节点之间所有:NextExp
关系的集合。
此外, length()用于测量匹配路径中的长度(节点数),不应直接作用于关系。
匹配关系并将它们放入每对节点的集合中。 迭代集合中的每个 rel 并设置 rels 集合的大小。
MATCH (s:LabeledExperience)-[r:NextExp]->(e:LabeledExperience)
WITH s, e, collect(r) AS rels
UNWIND rels AS rel
SET rel.weight = size(rels)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.