neo4j为具有相似属性的节点添加关系

时间:2013-11-21 15:01:01

标签: python python-2.7 neo4j

我有数据库,我希望连接具有相同属性的所有节点。例如:

node("name"="Bob","age":"32")
node("name"="cherry","age":"32")

我想在两个节点之间建立关系"age"。怎么做? 我使用py2neo python模块。 非常感谢!

1 个答案:

答案 0 :(得分:1)

您的问题有点模糊,但对于非常通用的解决方案,您可以尝试这样的密码查询(2.0语法)

MATCH n, m 
WHERE n<>m AND n.age = m.age AND NOT (n-[:AGE]->m) 
CREATE n-[r:AGE]->m 
RETURN r

这将获取每个节点并查找属性age具有相同值的任何其他节点,并为该节点创建关系[:AGE]。它会检查有问题的节点是否与其他节点之间没有这种关系,因此如果再次运行它会产生重复(但确实会在两个方向上创建关系)并且它还检查另一个节点node与第一个节点不同,因此它不会创建从节点到自身的关系。如果您想对不同的属性执行相同操作,则可以将该属性名称替换为age,并为该关系设置不同的类型。

由于您未指定要求,我认为这可以回答您的问题。您也可以在python代码中实现它,如果这是您想要做的,也许您可​​以显示到目前为止您尝试过的内容(您的问题中的代码段看起来不像有效的python)。建议可能考虑在相关属性上索引节点,这样当你有一个像(Bob {age:32})这样的节点时,你可以查找具有相同年龄值的所有其他节点,迭代结果并创建关系,而不是每次迭代遍历数据库中的所有节点。 Cypher也是如此,标签和索引会提高实际数据集的性能,但上面的查询说明了可以实现的方式。