以这种方式在Neo4j中使用foreach有什么问题?

时间:2013-08-12 16:51:29

标签: neo4j

我想使用foreach创建节点和关系。为每个m创建两个节点p,其中m [知道]:

start n=node(1) 
foreach(i in range(1,2): 
       create (m{id:i}) 
       foreach(j in range(1,2): 
              create (p{name:i,id:j}), 
              (m)-[:knows]->(p)
       )
);

没有语法错误,但它创建的节点数超出了我的预期。以下是创建的所有节点:

==> | Node[27]{id:1}              |
==> | Node[28]{name:1,id:1}       |
==> | Node[29]{name:1,id:2}       |
==> | Node[30]{name:1,id:1}       |
==> | Node[31]{}                  |
==> | Node[32]{name:1,id:2}       |
==> | Node[33]{}                  |
==> | Node[34]{id:2}              |
==> | Node[35]{name:2,id:1}       |
==> | Node[36]{name:2,id:2}       |
==> | Node[37]{name:2,id:1}       |
==> | Node[38]{}                  |
==> | Node[39]{name:2,id:2}       |
==> | Node[40]{}                  |

这些命令如何创建节点(30-33)和节点(37-40)?他们之间的关系是:

(31)-[:knows]->(30)
(33)-[:knows]->(32)
(38)-[:knows]->(37)
(40)-[:knows]->(39)

请帮帮我。非常感谢。

1 个答案:

答案 0 :(得分:1)

我不确定您的查询有什么问题,但这似乎在2.0.0中按预期工作。注意,我没有节点

CREATE (n:XX)
FOREACH (i in range(1,2) |
    CREATE (m:XX {id:i}),
    (m)-[:PARENT]->(n)
    FOREACH (j in range(3,4)|
        CREATE (p:XX {name:i, id:j}),
        (m)-[:KNOWS]->(p)
    )
)
RETURN n--()--()

我对此进行了一些修改以创建一个新节点作为根,并且语法自1x以来已更改,因此FOREACH现在使用管道|。只创建了没有空白节点的相应节点,就像您在示例中看到的那样。也许这是一个已被修复的错误?