代码之家  ›  专栏  ›  技术社区  ›  zakmck

使用Cypher或OpenCypher返回新图形

  •  2
  • zakmck  · 技术社区  · 6 年前

    这个问题来自于我们的经验 CONSTRUCT SPARQL中的运算符,它允许在图查询中获取变量绑定并返回新的图作为结果。

    我是说,假设你有:

    react1 - [part-of] -> pathway1
    mol1 - [consumed-by] -> react1
    mol2 - [consumed-by] -> react1
    mol3 - [produced-by] -> react1
    

    我想返回一个简化的图表,如:

    pathway1 - [input] - mol1
    pathway1 - [input] - mol2
    pathway1 - [output] - mol3
    

    注意,我已经玩过了 WITH/COLLECT/UNWIND

    1 回复  |  直到 6 年前
        1
  •  1
  •   stdob--    6 年前

    你可以试试 virtual relationships 使用 APOC library .

    例如,您有以下测试数据:

    MERGE p1 = (R:react {name:'react_1'})-[:`part-of`] ->(:pathway {name: 'pathway_1'})
    MERGE p2 = (:mol {name: 'mol_1'})-[:`consumed-by`]->(R)
    MERGE p3 = (:mol {name: 'mol_2'})-[:`consumed-by`]->(R)
    MERGE p4 = (:mol {name: 'mol_3'})-[:`produced-by`]->(R)
    RETURN *
    

    MATCH (R:react)
    MATCH (R)-[rp:`part-of`]-(p:pathway)
    MATCH (m:mol)-[mr]-(R)
    WITH p, m, mr,
         CASE WHEN type(mr) = 'consumed-by' 
              THEN {from: p, type: "input",  props: properties(mr), to: m}
              WHEN type(mr) = 'produced-by'
              THEN {from: m, type: "output", props: properties(mr), to: p}
         END AS vRel
    WITH vRel WHERE vRel IS NOT NULL
    CALL apoc.create.vRelationship(
      vRel.from,
      vRel.type,
      vRel.props,
      vRel.to
    ) YIELD rel
    RETURN vRel.from, rel, vRel.to
    

    enter image description here