【发布时间】:2018-01-05 17:13:46
【问题描述】:
我对 apoc.periodic.iterate 很困惑,我已在 (s1) 和 (s2) 之间的以下查询中成功使用它来创建新链接 [r:ALL_TRANSFERRED]:
//CREATE WEIGHTED LINK
CALL apoc.periodic.iterate(
"MATCH (s1)-[:TRANSFER]->(s2) WHERE s1 <> s2 RETURN s1,s2",
"MERGE (s1)-[r:ALL_TRANSFERRED]->(s2) ON CREATE SET r.weight = 1 ON MATCH SET r.weight = r.weight + 1"
, {batchSize:5000, parallel:false,iterateList:true})
但是当我尝试修改权重以添加基于新变量的计算时,它会创建一些额外的节点吗?假设 (s1) 和 (s2) 是与教师有关系的学校,所以我想将学校中的所有教师计算为一个名为 teachers_in_school 的新变量,可以在此计算中使用。我正在尝试:
//CREATE NORMALISED WEIGHTED LINK
CALL apoc.periodic.iterate(
"MATCH (s1)-[:TRANSFER]->(s2) WHERE s1 <> s2
WITH s1,s2
MATCH (t:Teacher)-[:HAD]->(c:Contract)-[:WITH]->(s1)
WHERE c.end = 2016
RETURN s1, count(distinct t) as teachers_in_school",
"MERGE (s1)-[r:ALL_TRANSFERRED]->(s2) ON CREATE SET r.weight = 1 ON MATCH SET r.weight = (r.weight + 1)/teachers_in_school"
, {batchSize:5000, parallel:false,iterateList:true})
但是我得到了一些额外的节点,其中包含链接到 (s1) 和 (s2) 的空标签,并且它们之间没有链接 [r:ALL_TRANSFERRED]!
【问题讨论】:
标签: neo4j graph-algorithm