首页 > 解决方案 > 如何使用密码查询获取连接节点之间的边缘类型

问题描述

我正在尝试从 neo4j 图中获取邻接矩阵。该矩阵包含丰富的特征。这意味着,如果两个节点相连,则将节点的类型(类型是节点的字段)和边类型放入相应的单元格中。这是一个样本矩阵:

[
   [0, 'node_1_type : edge_type : node_2_type', 0],
   ...
]

这是我要尝试的密码查询。但我不知道如何获取连接节点的 edge_type。

MATCH (n)
WITH collect(n) AS Nodes
WITH [n IN Nodes |
        [m IN Nodes |
            CASE size((n)-[]->(m))
                WHEN 0 THEN 0
                ELSE n.type + ':' + 'edge-type ??'  +  ':' + m.type
            END
        ]
    ] AS AdjacencyMatrix
RETURN AdjacencyMatrix;

您能否帮助如何获得连接节点之间的边缘类型。

标签: neo4jcypher

解决方案


由于您无法在CASE使用中获得命名结果UNWIND

MATCH (n)
WITH collect(n) AS Nodes
UNWIND Nodes AS n
  UNWIND Nodes AS m
  OPTIONAL MATCH (n)-[r]->(m)
  WITH n, m, 
    CASE r 
      WHEN NULL THEN 0 
      ELSE n.type + ':' + type(r) + ':' + m.type
    END AS e
  WITH m, collect(e) AS row
WITH collect(row) AS AdjacencyMatrix
RETURN AdjacencyMatrix;

推荐阅读