我有数据库,我想连接具有相同属性的所有节点。例如:
node("name"="Bob","age":"32")
node("name"="cherry","age":"32")
我想在两个节点之间建立关系“age”
。怎样才能做到呢?
我使用 py2neo python 模块。
非常感谢!
最佳答案
你的问题有点模糊,但是对于一个非常通用的解决方案,你可以尝试像这样的密码查询(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]
。它检查相关节点是否尚未与另一个节点建立这样的关系,因此如果再次运行它,您将不会得到重复项(但它确实在两个方向上创建了关系),并且它还检查另一个节点是否存在重复的关系。节点与第一个节点不同,因此它不会创建从节点到自身的关系。如果您想对不同的属性执行相同的操作,只需将该属性名称替换为 age
并为关系设置不同的类型。
由于您没有具体说明您的要求,我认为这回答了您的问题。您还可以在 python 代码中实现这一点,如果这就是您想要做的,也许您可以展示到目前为止您所尝试的内容(问题中的代码片段看起来不像有效的 python)。建议考虑在相关属性上对节点建立索引,这样当您有像 (Bob {age:32})
这样的节点时,您可以查找具有相同年龄值的所有其他节点,迭代结果并创建关系,而不是每次迭代数据库中的所有节点。 Cypher 也是如此,标签和索引将提高真实数据集的性能,但上面的查询说明了一种实现方法。
关于python - neo4j 向具有相似属性的节点添加关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20124379/