Neo4J(Cypher):我想创建x个节点,这些节点一次都与单个父节点双向连接,该怎么办?

时间:2018-09-18 07:01:02

标签: neo4j cypher

我正在尝试使自己熟悉Neo4J图形数据库及其专有语言Cypher。我一直致力于通过尝试塑造我所居住的城市的本体来进行研究。 该主题的基本前提是我想将100个节点与“父”注释相关联。 100个“子”节点将是街道编号,而它们都将连接到的一个节点是街道名称本身的节点。 我不是专业的程序员,很显然,它与之相距甚远。 我只是有点了解Python,所以下面的代码是我最好的例子,它可以例证我到底想要的是什么:

MATCH (s:Street{name:"Street_in_question"})
MATCH (n) WHERE (n)-[:STREET_NUMBER]->(s)
RETURN
CASE n.name
m = count(n.name)
WHEN m < 20
CREATE (sn:Street_Number{address:m})-[:STREET_NUMBER]->(s)
m + 1

因此,既然您希望了解我的目标,那么您能为我指明正确的方向吗?

编辑: 这是尝试实现Mastisa的建议的完整代码。

CREATE (d:Country{name:"Croatia"})
CREATE (z:County{name:"Grad Zagreb"})-[:COUNTY_OF_COUNTRY]->(d)
CREATE (d)-[:COUNTRY_OF]->(z)
CREATE (g:City{name:"Zagreb"})-[:CITY_OF]->(z)
CREATE (z)-[:COUNTY_OF_CITY]->(g)
CREATE (k:Neighbourhood{name:"Savica"})-[s:NEIGHBOURHOOD_OF_CITY]->(g)
CREATE (g)-[:CITY_OF_NEIGHBOURHOOD]->(k)
CREATE (gruska:Street{name:"Gruška"})-[:STREET_OF_NEIGHBOURHOOD]->(k)
CREATE (k)-[:NEIGHBOURHOOD_OF_STREET]->(gruska)
WITH RANGE(1, 20) as list
UNWIND list as child_number
CREATE(n:Street_Number {number:child_number})
WITH n MATCH (gruska)
CREATE (n)-[:ST_NUMBER]->(gruska)
CREATE (gruska)-[:NUMBER_OF_STREET]->(n)
RETURN n, gruska

它将每个创建的节点双向连接到所有内容,甚至它们本身。

1 个答案:

答案 0 :(得分:1)

使用WITHRANGE,希望波纹管密码查询可以为您提供帮助。

CREATE (n:Father)
UNWIND RANGE(1, 20) as child_number
CREATE(n:Child {name: 'CHILD '+child_number })
WITH n MATCH (f:Father)
CREATE (n)-[:CHILD_OF]->(f)
RETURN n, f

输出:

Created graph