Neo4J (Cypher): Я хочу создать x узлов, которые все двунаправленно связаны с одним родительским узлом одновременно, как я могу это сделать? - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь ознакомиться с графической базой данных 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

Итак, теперь, когда вы надеетесь понять мою цель, не могли бы вы указать мне правильное направление?

Edit: Это весь код с попыткой реализации предложенного Мастизой ниже.

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 голосов
/ 18 сентября 2018

Используйте WITH и RANGE, надеюсь, запрос ниже может помочь вам.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...