我有多个共享同一属性字段的节点,我需要将这些节点合并为一个,并同时将所有其他属性复制到合并节点中。
示例:
(n1,g,p1)(n2,g,p2)(n3,g,p3)=>(n,g,p1,p2,p3)
请注意,我不需要apoc
解决方案,因为用户定义的功能在我正在使用的CAPS中不起作用
geohash是具有重复值的字段,因此我想通过该字段合并节点。
CAPS团队给了我这个密码查询,以使它具有与初始图不同的geohash节点:
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
答案 0 :(得分:1)
在纯密码中不可能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
但是对于第二部分,您需要能够创建具有动态类型和动态方向的关系,并且在密码中是不允许的...