首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CREATE与FOREACH在CYPHER中的结合给出了意想不到的结果

CREATE与FOREACH在CYPHER中的结合给出了意想不到的结果
EN

Stack Overflow用户
提问于 2014-05-13 13:23:31
回答 2查看 267关注 0票数 1

我有一个图形,其中版本控制信息存储为:添加或:删除节点之间的关系。我想用另一个模型来代替这些rels,基于:用属性类型和时间戳更新rels。

目前

代码语言:javascript
运行
复制
MATCH (n:tocversion)-[r:ADD]->(m) 
RETURN n.version,id(m)

返回(如预期的)

代码语言:javascript
运行
复制
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。就像这样。

代码语言:javascript
运行
复制
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)))

然而,洋娃娃是以一种我不明白的方式创造出来的,因为

代码语言:javascript
运行
复制
MATCH (t:toc)-[r:`UPDATE`]->(b) RETURN r.version,r.type,id(b)

返回

代码语言:javascript
运行
复制
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

而不是预期的

代码语言:javascript
运行
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-13 20:10:13

找到了。必须使用范围

代码语言:javascript
运行
复制
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)))
票数 1
EN

Stack Overflow用户

发布于 2014-05-13 19:54:58

可能是因为这个原因:

代码语言:javascript
运行
复制
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)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23632512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档