Neo4j 通过属性字段合并节点
我有不同的节点共享一个相同的属性字段,我需要将这些节点合并为一个,同时复制合并节点中所有其他属性 例如: (n1,g,p1)(n2,g,p2)(n3,g,p3)=>(n,g,p1,p2,p3) 重要的是要注意,我不需要apoc解决方案,因为用户定义的函数在我使用的CAP中不起作用 更新: geohash是具有重复值的字段,因此我希望通过该字段合并节点 CAPS团队给了我这个cypher查询,使其具有与初始图不同的geohash节点:Neo4j 通过属性字段合并节点,neo4j,cypher,Neo4j,Cypher,我有不同的节点共享一个相同的属性字段,我需要将这些节点合并为一个,同时复制合并节点中所有其他属性 例如: (n1,g,p1)(n2,g,p2)(n3,g,p3)=>(n,g,p1,p2,p3) 重要的是要注意,我不需要apoc解决方案,因为用户定义的函数在我使用的CAP中不起作用 更新: geohash是具有重复值的字段,因此我希望通过该字段合并节点 CAPS团队给了我这个cypher查询,使其具有与初始图不同的geohash节点: CATALOG CREATE GRAPH temp {
CATALOG CREATE GRAPH temp {
FROM GRAPH session.inputGraph
MATCH (n)
WITH DISTINCT n.geohash AS geohash
CONSTRUCT
CREATE (:HashNode {geohash: geohash})
RETURN GRAPH
}
FROM GRAPH inputGraph
MATCH (from)-[via]->(to)
FROM GRAPH temp
MATCH (n), (m)
WHERE from.geohash = n. AND AND to.geohash = m.geohash
CONSTRUCT
CREATE (n)-[COPY OF via]->(m)
RETURN GRAPH
但是,它仍然缺少合并节点上其余属性的集合
我对关系没有问题,因为我们可以稍后从初始图中复制它们:
CATALOG CREATE GRAPH temp {
FROM GRAPH session.inputGraph
MATCH (n)
WITH DISTINCT n.geohash AS geohash
CONSTRUCT
CREATE (:HashNode {geohash: geohash})
RETURN GRAPH
}
FROM GRAPH inputGraph
MATCH (from)-[via]->(to)
FROM GRAPH temp
MATCH (n), (m)
WHERE from.geohash = n. AND AND to.geohash = m.geohash
CONSTRUCT
CREATE (n)-[COPY OF via]->(m)
RETURN GRAPH
在纯cypher中这不是100%可能的,这就是为什么有一个APOC程序 要合并两个节点,必须:
- 使用所有属性创建合并节点
- 创建合并节点上所有节点的关系
MATCH (n) WHERE id(n) IN [106, 68]
WITH collect(n) AS nodes
CREATE (new:MyNode)
with nodes, new
UNWIND nodes as node
SET new += properties(node)
RETURN new
但是对于第二部分,您需要能够创建具有动态类型和动态方向的关系,这在cypher中是不允许的…第一步是我需要的,但是需要合并的字段不是id而是geohash字段这只是一个示例,您需要替换第一行所需的内容,合并是从第二行到最后完成的。