Создайте отношения в neo4j, если не существует, обновите значение свойства, если существует - PullRequest
0 голосов
/ 31 августа 2018

У меня есть узел с тремя свойствами, скажем, что-то созданное как

create (a:item{type:'detergent', weight:'500g', 'quantity':322}) 

И еще один узел, такой как

create (b:customer{id:'933B3'})

Должна существовать связь со свойством count от узла a до узла b.

Я хочу создать связь с count = 1, если связь еще не существует, в противном случае обновите значение счетчика, добавив к нему 1, что-то вроде set relationship.count = relationship.count + 1

Я могу использовать MERGE вместе с ON CREATE и ON MATCH для этой цели. Однако вот в чем проблема: MERGE соответствует целому шаблону, тогда как я хочу сопоставить только два свойства узла a, а не все три.

Поэтому технически я хочу создать отношения между

a:item{type:'detergent', weight:'500g'} и b:customer{id:'933B3'}

Это означает, что все узлы с label = item , type = моющим средством и weight = 500g должны иметь отношения с клиентом id = 933B3 независимо от количества моющего средства.

Если я использую MERGE для двух свойств узла a, это не создаст взаимосвязи между существующим узлом элемента (который имеет 3 свойства) и клиентским узлом, а скорее создаст новые узлы со свойствами, указанными в MERGE. Как упоминалось выше, мне также необходимо обновить свойство count, если выясняется, что связь уже существует.

Как можно сопоставить выбранные свойства уже существующих узлов, чтобы создать связь между существующими узлами с помощью инициализирующего значения свойства, а в противном случае обновить значение свойства связи, которая уже существует?

1 Ответ

0 голосов
/ 31 августа 2018

Когда вы используете MERGE, вам не нужно указывать все свойства узла. MERGE похож на МАТЧ, и если совпадений не найдено, то СОЗДАЙТЕ. Определенно есть узлы элементов с этими свойствами, и не имеет значения, есть ли дополнительные свойства, помимо тех, которые вы указали в MERGE.

Это должно работать для вас:

MERGE (a:item{type:'detergent', weight:'500g'})
MERGE (b:customer{id:'933B3'})
MERGE (a)-[r:REL]->(b) // replace with your actual relationship type
ON CREATE SET r.count = 1
ON MATCH SET r.count = r.count + 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...