首页 文章

按属性字段合并节点

提问于
浏览
-1

我有不同的节点共享一个相同的属性字段,我需要将这些节点合并为一个,同时复制合并节点中的所有其他属性 .

例:

(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

1 回答

  • 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
    

    但是对于第二部分,您需要能够创建与动态类型和动态方向的关系,这在cypher中是不允许的......

相关问题