Neo4j - получить список узлов, совместно используемых двумя узлами, в качестве свойства ребра - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть два типа узлов.

  1. Индивидуальный
  2. Продукт

Мой главный край -

(i:Individual)-[:BUYS]->(p:Product)

Например,

(BOB)-[BUYS]->(MILK)
(BOB)-[BUYS]->(APPLES)
(SAM)-[BUYS]->(BEER)
(LAURA)-[BUYS]->(MILK)
(LAURA)-[BUYS]->(APPLES)

Я хочу край, который

(BOB)-[BUYS_THE_SAME_THINGS_AS {shared_products: [MILK, APPLES]}]-(LAURA)

Создать край довольно просто

MATCH (i1:Individual)-[b1:BUYS]->(p:Product)<-[b2:BUYS]-(i2:Individual) WHERE (i1.name <> i2.name)
MERGE (i1)-[BUYS_THE_SAME_THINGS_AS]-(i2)

Я бы хотел установить в качестве атрибута отношения [BUYS_THE_SAME_THINGS_AS] массив [MILK, APPLES]

В этом примере это просто, потому что я знаю, что это молоко и яблоки. Но, допустим, я делаю это для более чем 50 тыс. Человек и 100 тыс. Продуктов ... Я хочу, чтобы для каждого сопоставленного шаблона оно добавляло имя продукта в массив вещей в свойстве edge

Но я новичок в Cypher и не могу найти, как это сделать. Так что если у кого-то есть идеи, я был бы рад услышать

1 Ответ

0 голосов
/ 04 апреля 2019

Чтобы добавить свойства к вашей новой ссылке, вы можете перейти со следующего

MATCH (i1:Individual)-[b1:BUYS]->(p:Product)<-[b2:BUYS]-(i2:Individual)
WHERE (i1.name <> i2.name)
MERGE (i1)-[l:BUYS_THE_SAME_THINGS_AS]-(i2)
ON CREATE set l.things=[p.name]
ON MATCH set l.things=l.things+p.name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...