Neo4j和Cypher:创建与具有类似属性键的节点的关系

时间:2015-08-07 03:20:27

标签: neo4j

给出以下节点:

create(:ABC{id:'1', a:'axle',b:'bat'})
create(:ABC{id:'2', a:'ant',b:'ball',c:'clown'})
create(:ABC{id:'3', e:'elk',f:'fog',g:'gaff'})
create(:ABC{id:'4', a:'ax',c:'car',z:'zink'})

使用cypher,如何在共享一个或多个属性键的节点之间创建边(不管它们的属性值和未知的属性集)?我相当肯定我可以通过python单独迭代到节点并创建边缘,但我在cypher中尝试过这样做没有成功。

1 个答案:

答案 0 :(得分:1)

这是一个查询,它在每对节点之间创建SHARES_KEYS_WITH关系,这些节点共享至少一个具有相同名称的属性(忽略所有示例节点都具有的id属性)。 / p>

MATCH (m),(n)
WHERE (ID(m) > ID(n)) AND ANY (k IN KEYS(m) 
                              WHERE k <> 'id' AND k IN KEYS(n))
CREATE (m)-[:SHARES_KEYS_WITH]->(n)
RETURN m, n;

ID(m) > ID(n)测试确保我们只评估每对不同的节点一次。 (请注意,ID()函数返回neo4j生成的内部标识符 - 与您的id属性不同。)