给出以下节点:
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中尝试过这样做没有成功。
答案 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
属性不同。)