Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j 通过属性字段合并节点_Neo4j_Cypher - Fatal编程技术网

Neo4j 通过属性字段合并节点

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 {

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

例如:

(n1,g,p1)(n2,g,p2)(n3,g,p3)=>(n,g,p1,p2,p3)

重要的是要注意,我不需要apoc解决方案,因为用户定义的函数在我使用的CAP中不起作用

更新: geohash是具有重复值的字段,因此我希望通过该字段合并节点

CAPS团队给了我这个cypher查询,使其具有与初始图不同的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
但是,它仍然缺少合并节点上其余属性的集合

我对关系没有问题,因为我们可以稍后从初始图中复制它们:

  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程序

要合并两个节点,必须:

  • 使用所有属性创建合并节点
  • 创建合并节点上所有节点的关系
对于第一部分来说,这在cypher中是可能的。例如:

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字段这只是一个示例,您需要替换第一行所需的内容,合并是从第二行到最后完成的。