2

我有一个部分顶点和一个 used_by 边,其属性称为数量。

我目前从以下内容开始

MATCH (a:part {part_num: '123')-[u:used_by*]->(b:part {part_num: '456')
RETURN [x IN u::jsonb | x.properties.quantity] AS quantities

数组理解返回一个数量数组。从 a-[*]->b 有一条路径,但有多个跃点。从匹配返回的 u 边适用于各种跳跃路径中的每一个,而不仅仅是连接 a 到 b(最长路径)的那个。

一旦我有了数组,我需要对其中的值求和。

我不确定这在agensgraph中是否可行

4

1 回答 1

0

假设您有一个具有以下设置的图表:

CREATE (a:Part {'part_num': '123'}), (b:Part {'part_num': '345'}), 
       (c:Part {'part_num': '456'}), (d:Part {'part_num': '789'}); 

MATCH (a:Part {'part_num': '123'}), (b:Part {'part_num': '345'})
CREATE (a)-[u:used_by { quantity: 1 }]->(b);

MATCH (b:Part {'part_num': '345'}), (c:Part {'part_num': '456'})
CREATE (b)-[u:used_by { quantity: 2 }]->(c);

MATCH (a:Part {'part_num': '123'}), (d:Part {'part_num': '789'}) 
CREATE (a)-[u:used_by { quantity: 1 }]->(d);

然后你会得到下图: 图形

使用您的基本查询,我们得到一个 JSON 数组

MATCH (a:part {part_num: '123'})-[u:used_by*]->(b:part {part_num: '456'})
RETURN [x IN u::jsonb | x.properties.quantity] AS quantities

-- Results
 quantities
------------
 [1, 2]
(1 row)

最后,我们只需要利用 AgnsGraph 的混合 SQL/Cypher 功能来转换该数组jsonb_array_elements_text,然后使用SUM该子查询。

SELECT sum(quantity::int) AS sum_of_used_by
FROM (
  SELECT jsonb_array_elements_text(paths.quantity) AS quantity
  FROM ( 
    MATCH (a:part {part_num: '123'})-[u:used_by*]->(b:part {part_num: '456'})
    RETURN [x IN u::jsonb | x.properties.quantity] AS quantity
  ) AS paths
) as total

-- Results
 sum_of_used_by
----------------
              3
(1 row)
于 2020-11-19T19:46:04.707 回答