Neo4j连接两个或多个具有相同标签的节点

时间:2015-12-15 20:26:25

标签: neo4j cypher

我正在努力连接具有相同标签值的节点以显示关系。但是,当我运行下面的代码时,它正在这样做,但也为自己和同名的另一个节点添加了一个关系:

 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 个答案:

答案 0 :(得分: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语句确保不会创建重复的关系。