У меня есть график с предложениями и клиентами. Клиент может поделиться предложением с другим клиентом, поэтому, когда это происходит, я создаю гиперребро.
(КлиентA)-[:SHARED_OFFER]->(новый узел)
(новый узел)-[:FOR_OFFER]->(предложение)
(newNode)-[:SHARED_WITH]->(клиенты) (это может быть много клиентов)
Теперь, если другой клиент B делится одним и тем же предложением с другими, я бы хотел, чтобы новый узел был создан для представления этой связи. Есть ли способ выполнить все это в одном запросе Cypher?
Я использую:
start c=node:node_auto_index(name="C1"), o=node:node_auto_index(name="Offer"), sharedCustomer=node:node_auto_index(name="C2")
create unique c-[:SHARED_OFFER]->(sharedOffer)-[:FOR_OFFER]->(o), (sharedOffer)-[:SHARED_WITH]->(sharedCustomer)
который работает в первый раз. См. консоль по адресу: http://console.neo4j.org/r/76no2g Этот запрос корректен создал отношения, когда C1 поделился предложением с C2.
Выполнение запроса для случая, когда C2 теперь разделяет предложение с C3, приводит к повторному использованию одного и того же узла — это не то, что мне нужно. Должен быть новый узел, созданный из C2 с отношением SHARED_OFFER. Вот запрос:
start c=node:node_auto_index(name="C2"), o=node:node_auto_index(name="Offer"), sharedCustomer=node:node_auto_index(name="C3")
create unique c-[:SHARED_OFFER]->(sharedOffer)-[:FOR_OFFER]->(o), (sharedOffer)-[:SHARED_WITH]->(sharedCustomer)
Любая помощь приветствуется. Примечание. Я использую 1.8.1 REST, поэтому пытаюсь выполнить все за один раз, а не по частям.