我有一个图形,其中版本控制信息存储为:添加或:删除节点之间的关系。我想用另一个模型来代替这些rels,基于:用属性类型和时间戳更新rels。
目前
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's,并利用它们作为基础,在新的模式中创建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)))然而,洋娃娃是以一种我不明白的方式创造出来的,因为
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发布于 2014-05-13 20:10:13
找到了。必须使用范围
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)))发布于 2014-05-13 19:54:58
可能是因为这个原因:
FOREACH(i IN versions |
FOREACH(m1 IN [ms[i]] |您的"i“将是: 1,1,2,2,3,3,3,3,4,4,如预期的。
但是,如果在ms[]集合中使用这些索引(这是基于0的),您将看到ms[] = {13、14、15、16、17。,所以ms1总是14,ms2总是15,ms3总是16,ms4永远是17。
您的"foreach“循环需要重新考虑,因为"i”不应该用作查找"ms“。
事实上,我也不确定是否应该将"i“作为”版本“的索引,这在CREATE语句中是这样做的,因为您可能会遇到类似的问题(例如,versions3总是2)。
https://stackoverflow.com/questions/23632512
复制相似问题