Cypher:根据公共属性密钥id在节点之间创建关系

时间:2014-10-20 03:45:56

标签: neo4j cypher

我是Cypher(和Stackoverflow)的新手,并且无法根据共享属性键在节点之间创建关系。

我想做这样的事情:

MATCH (a:Person)-->()<--(b:Country)
WHERE HAS (a.id) AND HAS (b.id) AND a.id=b.id
CREATE (a)-[:LIVES]->(b);

在Country节点和Person节点之间创建一个关系,它们共享相同的id。

以上内容在运行时不会产生错误,但也不会创建任何关系,我知道ID应该匹配。

非常感谢!!

编辑:

我想我知道出了什么问题 - 我要求匹配与彼此有关系的节点,但没有设置关系,因此结果为0。我现在尝试过:

MATCH (a:Person),
(b:Country)
WHERE HAS (a.id) AND HAS (b.id) AND a.id=b.id
CREATE (a)-[:LIVES]->(b);

并且查询正在运行。它是一个很大的数据集,所以可能需要一段时间......

2 个答案:

答案 0 :(得分:3)

那很有用。不得不减少我的数据集的大小(从64k节点下降),因为Neo4j需要花费太长时间来处理,但是一旦我有一个较小的设置它就可以正常工作。

答案 1 :(得分:0)

为将来的Google员工提供的少量补充。

根据帮助files(自3.4版开始)

  

has()函数已被exist()取代,并已被删除。

新代码应显示为

MATCH (a:Person),
(b:Country)
WHERE EXISTS (a.id) AND EXISTS (b.id) AND a.id=b.id
CREATE (a)-[:LIVES]->(b);