如何在集合中创建元素之间的关系

时间:2014-05-21 09:30:46

标签: neo4j cypher

有一组节点User,查询返回一个集合(例如两个节点MaryMario)。

match (u:User)
where u.name =~ 'M.*'
return u

我如何建立他们之间的关系。我不知道这是否可行。我没有做任何特别的事情,这只是一次学习练习。

match (u:User)
where u.name =~ 'M.*'
foreach ( n in nodes(u) | create (n)-[:knows]-> (n+1)) #=> I am stuck here

1 个答案:

答案 0 :(得分:2)

您可以只匹配用户两次,然后使用这些对或使用foreach中的范围函数。

请参阅此博文:http://jexp.de/blog/2014/03/quickly-create-a-100k-neo4j-graph-data-model-with-cypher-only/

foreach (name in ["Martin", "Max","Marius"] | create (:User {name:name}))


MATCH (u:User)
WHERE u.name =~ 'M.*'
WITH collect(u) as users
foreach ( i in range(1,length(users)-1) | 
  foreach (u1 in [users[i-1]] | foreach ( u2 in [users[i]] |  
    create (u1)-[:knows]-> (u2) ))
)

请参阅此图表主题,了解其工作原理:http://gist.neo4j.org/?b01ae5a9a863e126c116