2015-12-15 54 views
0

我正在使用相同标签值连接节点以显示关系。然而,当我运行下面的代码,它是这样做的,但也增加了自身的关系以及与同名的其他节点:Neo4j连接两个或多个具有相同标签的节点

MATCH (a:rec_sku), (b:rec_sku) 
WHERE a.also_bought_sku = b.also_bought_sku 
CREATE (a)-[r:SAME_SKU]->(b) 

我也使用嵌套循环尝试了更复杂的解决方案,但跑到同一个问题:

MATCH (n:rec_sku) 
WITH collect(n) as plist 
FOREACH (x IN plist | 
FOREACH (y IN filter(z in plist WHERE x.also_bought_sku = z.also_bought_sku)  | 
CREATE (y)-[:SAME_SKU]->(x) 
) 
); 

回答

1

为了避免增加了一个自我的关系,只需添加一个WHERE条款进行过滤:

MATCH (a:rec_sku), (b:rec_sku) 
WHERE NOT a=b AND a.also_bought_sku = b.also_bought_sku 
CREATE UNIQUE (a)-[r:SAME_SKU]->(b) 

您也可以使用CREATE UNIQUE声明以确保不会创建重复的关系。

相关问题