我正在尝试执行以下密码查询,以便在集合节点列表中存在的所有节点之间创建一个关系。
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’找到了
知道我哪里出问题了吗?
发布于 2014-03-10 04:44:23
如果您想要在集合中的所有节点之间创建一个知道的关系:
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,则必须相应地修改查询。
发布于 2014-03-09 18:05:12
您的第一个FOREACH应该如下所示。此外,我认为第4行在查询中是多余的。如果你想收集性别,你可以直接收集(n.Gender)作为性别。如果您确实需要使用该行,您也需要在第一个WITH中传递WITH,否则它将不会在第二个WITH子句中重新定义。另外,您也不需要从START n=node(*)开始
试着在下面
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) )))https://stackoverflow.com/questions/22284082
复制相似问题