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

AQL嵌套UPSERT报错variable '$OLD' is assigned multiple times如何解决

报错原因

ArangoDB AQL 语法中,UPSERT 语句默认会在当前作用域自动生成 $OLD(匹配到的已有文档,无匹配则为null)和 $NEW(插入/更新完成后的文档)两个固定命名的临时变量,同作用域内使用多个 UPSERT 时会触发变量重复声明的报错。

解决方案

给每个 UPSERT 语句指定自定义变量接收执行结果,替代默认的 $OLD/$NEW 即可避免命名冲突,多层嵌套时每层指定不同的自定义变量名即可。

修正后的可运行代码如下:

FOR sport IN ${data}
    FOR country IN sport.C
        FOR league IN country.L
            // 第一个UPSERT指定自定义变量接收结果,避免生成默认的$OLD/$NEW
            UPSERT { I: league.I } 
            INSERT { I: league.I, C: country.I, S: sport.I } 
            UPDATE { I: league.I, C: country.I, S: sport.I } IN leagues
            INTO leagueUpsertResult
            
            FOR event IN league.E
                // 第二个UPSERT也指定独立的自定义变量
                UPSERT { I: event.I }
                INSERT {
                    I: event.I,
                    L: league.I
                }
                UPDATE { 
                    I: event.I,
                    L: league.I
                } IN events
                INTO eventUpsertResult

如果后续还有更多层级的嵌套更新,只需要给每一层的 UPSERT 配置不同的自定义接收变量名即可正常使用,上层循环的变量取值逻辑完全不受影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:54:07