考虑这个玩具示例:
MERGE (:Obj {desc:'A',id:1})
MERGE (:Obj {desc:'A',id:2})
MERGE (:Obj {desc:'A',id:3})
MERGE (:Obj {desc:'A',id:4})
MERGE (:Obj {desc:'B',id:5})
MERGE (:Obj {desc:'B',id:6})
我有6个不同的节点,但是描述只有两个不同的值(因此,只有两类节点)。假设我现在想创建一个关系SAME_AS
,所有具有相同描述的节点都将通过该关系被连接。也就是说,我应该能够从节点 x 到达遍历SAME_AS
关系的具有相同描述的所有其他节点。
对于连接的子组件,我更喜欢星形图,其中对于每个类别,具有最小id
的节点都充当原型,而所有其他等价节点链接到。 (另一种可能性不是很好,可能是哈密顿路径)
到目前为止,我只想到了这个
MATCH (o1:Obj), (o2:Obj)
WHERE o1.desc=o2.desc AND o1.id<o2.id
MERGE (o1)<-[:SAME_AS]-(o2)
但是它为每个班级建立了一个派系。
在MATCH
语句中使用FOREACH
需要更好的解决方案,这在neo4j
中是不允许的。
我什至不知道是否适合使用cypher
,或者我是否应该在neo4j
之外执行这些计算,然后才将信息写入数据库。
谢谢
答案 0 :(得分:1)
这样的事情怎么样
ct_data_p