首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >执行嵌套Foreach时Neo4j Cypher查询错误

执行嵌套Foreach时Neo4j Cypher查询错误
EN

Stack Overflow用户
提问于 2014-03-09 15:26:18
回答 2查看 880关注 0票数 1

我正在尝试执行以下密码查询,以便在集合节点列表中存在的所有节点之间创建一个关系。

代码语言:javascript
复制
    START n=node(*)
    MATCH(n)
    WHERE has(n.Gender)
    WITH n.Gender as Gender
    WITH collect(n) as nodelist 
    FOREACH (i in RANGE(0,length(nodelist-2))|
    FOREACH(si in [nodelist[i]|
    FOREACH(si2 in[nodelist[i+1] |
    CREATE UNIQUE (si-[:KNOWS]->si2))))

它在nodelisti的第二个FOREACH循环中给出了一个错误。

我试着把nodelist(我)放进去,它给了我一个错误,它说了‘-’预期的,但‘x’找到了

知道我哪里出问题了吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-10 04:44:23

如果您想要在集合中的所有节点之间创建一个知道的关系:

代码语言:javascript
复制
 MATCH(n)
 WHERE has(n.Gender)
 WITH collect(n) as nodelist 
 FOREACH (x IN nodelist | 
     FOREACH (y IN filter(z IN  nodelist WHERE NOT (z=x)) | 
         MERGE (x)-[:knows]-(y)
     )
 )

注意你们关系的方向。每个节点将在节点列表中以特定的方向连接到另一个节点。如果您想要双关系,即a-知情->b以及b-:明知->a,则必须相应地修改查询。

票数 2
EN

Stack Overflow用户

发布于 2014-03-09 18:05:12

您的第一个FOREACH应该如下所示。此外,我认为第4行在查询中是多余的。如果你想收集性别,你可以直接收集(n.Gender)作为性别。如果您确实需要使用该行,您也需要在第一个WITH中传递WITH,否则它将不会在第二个WITH子句中重新定义。另外,您也不需要从START n=node(*)开始

试着在下面

代码语言:javascript
复制
MATCH(n)
WHERE has(n.Gender)
WITH collect(n) as nodelist,collect(n.Gender) as Gender 
FOREACH (i in RANGE(0,length(nodelist)-2)|
FOREACH(si in [nodelist[i]]|
FOREACH(si2 in [nodelist[i+1]] |
CREATE UNIQUE (si)-[:KNOWS]->(si2) )))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22284082

复制
相关文章

相似问题

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