You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Apache AGE中匹配属性并删除返回指定边

问题描述

我正在使用PostgreSQL的图数据库扩展Apache AGE,拥有名为sample_graph的图,其中包含Car和Country节点,二者由MadeIn边连接。当前我的MadeIn边没有任何属性,我希望依据边自身的属性删除特定边并返回被删除的边。

当前图状态示例:

Car {name: 'Lamborghini', madeIn: 'Italian'} -[MadeIn]-> Country {name: 'Italian'}
Car {name: 'Ford', madeIn: 'America'} -[MadeIn]-> Country {name: 'America'}
Car {name: 'Bughatti', madeIn: 'French'} -[MadeIn]-> Country {name: 'French'}

我尝试了如下查询,但它没有删除目标边:

SELECT *                                                         
FROM cypher('sample_graph', $$                                                     
MATCH (a:Car)-[r:MadeIn]->(b:Country)                                           
WHERE a.name = 'Lamborghini' AND b.name = 'Italy'                               
DELETE r                                                                       
RETURN r                                                                   
$$) as (r agtype);
问题分析与解决

1. 当前查询的问题

你的查询WHERE条件中b.name = 'Italy'与实际数据里的Country节点名称'Italian'不匹配,导致无法定位到目标边,所以没有执行任何删除操作。另外你提到的“删除了顶点”是误解,DELETE r语法是明确删除边的,只是因为匹配不到目标,才没有效果。

2. 无属性边的删除(通过关联节点定位)

在MadeIn边无属性的情况下,只能通过关联的Car和Country节点属性定位目标边,修正条件后即可删除:

SELECT *                                                         
FROM cypher('sample_graph', $$                                                     
MATCH (a:Car)-[r:MadeIn]->(b:Country)                                           
WHERE a.name = 'Lamborghini' AND b.name = 'Italian'                               
DELETE r                                                                       
RETURN r                                                                   
$$) as (r agtype);

该查询会匹配兰博基尼到意大利的MadeIn边,删除后返回这条被删除的边。

3. 依据边自身属性删除的方法(先给边添加属性)

如果确实需要通过边自身属性删除,首先得给MadeIn边添加属性,比如添加production_year属性:

SELECT *
FROM cypher('sample_graph', $$
MATCH (a:Car)-[r:MadeIn]->(b:Country)
SET r.production_year = 2023
WHERE a.name = 'Lamborghini'
RETURN r
$$) as (r agtype);

添加属性后,就可以通过边的属性定位并删除:

SELECT *
FROM cypher('sample_graph', $$
MATCH (a:Car)-[r:MadeIn]->(b:Country)
WHERE r.production_year = 2023
DELETE r
RETURN r
$$) as (r agtype);

内容的提问来源于stack exchange,提问作者AmrShams07

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 19:52:17