Neo4j - 获取两个节点共享的节点列表作为边缘属性

问题描述 投票:0回答:1

我有两种类型的节点。

  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]的属性

在这个例子中它很简单,因为我知道它是牛奶和苹果。但是,让我们说我正在做超过50K个人和100K产品...我希望每个匹配的模式,它将产品名称附加到edge属性中的东西数组

但我是Cypher的新手,无法找到如何做到这一点。所以,如果有人有任何见解,我会很高兴听到

neo4j cypher
1个回答
0
投票

要为新链接添加属性,您可以使用以下内容

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
© www.soinside.com 2019 - 2024. All rights reserved.