Запретить создание новых отношений на основе атрибута узла - PullRequest
1 голос
/ 01 июня 2019

Я пытаюсь создать график с использованием Neo4j, который устанавливает отношения между городами и улицами.Может быть несколько улиц с одинаковым названием, принадлежащих разным городам, но единственным ограничением является то, что в одном городе не может быть двух улиц с одинаковым названием.Представьте, что у меня есть следующий сценарий:

Здесь я создаю два узла улиц, используя Cypher с тем же названием улицы:

(st1: Street { streetName: 'streetName1'}),
(st2: Street { streetName: 'streetName1'}),

Здесь я создаю узел города:

(city1: City { cityName: 'cityName1'}),

Я знаю, что st1 принадлежит city1, поэтому я создаю отношения между ними:

(st1)-[:BELONGS_TO]->(city1)

Мой вопрос: учитывая, что у меня есть эти отношения уже на графике, есть ли способ предотвратить создание новогоотношения между city1 и любым другим узлом улицы, атрибутом streetName которого является 'streetName1', как показано ниже

(st2)-[:BELONGS_TO]->(city1)

1 Ответ

0 голосов
/ 02 июня 2019

Вот пример того, как вы можете создать улицу и связать ее с городом, если и только если в городе еще нет улицы с таким названием:

MATCH (city1:City {name: 'Foo'})
OPTIONAL MATCH (st:Street {streetName: 'streetName1'})-[:BELONGS_TO]->(city1)
FOREACH(x IN CASE WHEN st IS NULL THEN [1] END |
  CREATE (st2:Street {streetName: 'streetName1'})-[:BELONGS_TO]->(city1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...