我有一个图表,其中版本信息存储为节点之间的[:ADD]或[:REMOVE]关系。我希望用[:UPDATE] rels替换属性类型和时间戳的另一个模型替换这些rel。
目前
MATCH (n:tocversion)-[r:ADD]->(m)
RETURN n.version,id(m)
返回此(如预期的那样)
n.version,id(m)
1,13
1,14
2,15
2,16
3,17
3,18
3,19
3,20
4,21
4,22
现在我想我可以收集版本和m并使用它们作为在新模型中创建rels的基础。像这样。
MATCH (n:tocversion)-[r:ADD]->(m),(t:toc)
WITH t,COLLECT(n.version) AS versions, COLLECT(m) AS ms
FOREACH(i IN versions |
FOREACH(m1 IN [ms[i]]|
CREATE (t)-[r1:UPDATE {type:"ADD", version:versions[i]}]->(m1)))
然而,rels是以我不理解的方式创建的,因为
MATCH (t:toc)-[r:`UPDATE`]->(b) RETURN r.version,r.type,id(b)
返回
r.version,r.type,id(b)
1, ADD, 14
1, ADD, 14
2, ADD, 15
2, ADD, 15
2, ADD, 16
2, ADD, 16
2, ADD, 16
2, ADD, 16
3, ADD, 17
3, ADD, 17
而不是预期的
r.version,r.type,id(b)
1, ADD, 13
1, ADD, 14
2, ADD, 15
2, ADD, 16
3, ADD, 17
3, ADD, 18
3, ADD, 19
3, ADD, 20
4, ADD, 21
4, ADD, 22
答案 0 :(得分:0)
可能因为这个:
FOREACH(i IN versions |
FOREACH(m1 IN [ms[i]] |
你的"我"将是:1,1,2,2,3,3,3,3,4,4,如预期的那样。
但如果您将这些作为ms []集合(基于0)的索引使用,那么您将会看到ms [] = {13,14,15,16 ,17,..,22},所以ms [1]将始终为14,ms [2]将始终为15,ms [3]将始终为16,ms [4]将始终为17。
你的" foreach"循环需要重新考虑,因为" i"不应该用作查找" ms"。
事实上,我也不确定"我"应该用作"版本"的索引。您在CREATE语句中执行的操作,因为您可能会遇到与上述类似的问题(例如版本[3]将始终为2)。
答案 1 :(得分:0)
找到它。不得不使用RANGE
match (n:tocversion)-[r:ADD]->(m),(t:toc)
with t,collect(n.version) as versions, collect(m) as ms
foreach(i in RANGE(0, LENGTH(versions)-1) |
foreach(m1 in [ms[i]]|
create (t)-[r1:UPDATE5 {type:"ADD", version:versions[i]}]->(m1)))