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

如何用ArangoDB的AQL实现数组元素的存在更新、不存在添加

用AQL实现日期值数组的增改逻辑

需求说明

有一个由{date: 日期字符串, value: 数值}对象组成的有序数组,需要实现:

  • 若数组中无对应日期的对象,添加新的日期+值对象
  • 若已有对应日期的对象,将新值累加到原有值上
    注:新对象的日期总是晚于数组中已有日期,数组需保持有序

示例数据

  • 初始数组:[{date:"2024-10-05",value:2},{date:"2024-10-06",value:1}]
  • 添加{date:"2024-10-07",value:2},因无对应日期,结果数组:[{date:"2024-10-05",value:2},{date:"2024-10-06",value:1},{date:"2024-10-07",value:2}]
  • 再次添加{date:"2024-10-07",value:2},更新对应值为4,结果数组:[{date:"2024-10-05",value:2},{date:"2024-10-06",value:1},{date:"2024-10-07",value:4}]

参数为@newDate, @valueAdd,原本困惑如何用AQL实现数组版本的增改逻辑,后来改用对象存储方案解决:

对象存储替代方案

用日期字符串作为键的对象替代数组,结构示例:{"2024-10-05":2, "2024-10-06":1,"2024-10-07":4}

更新逻辑的AQL语句

let x = HAS(MyObject,@today) ? MyObject[@today] : 0
let xx = MERGE(NOT_NULL(MyObject,{}), {@today: x+@add})
UPDATE MyVertice WITH {MyObject: xx} IN MyCollection

获取最新值的AQL语句

let MyVertice = DOCUMENT("MyCollection/A")
let latestDate = ATTRIBUTES(MyVertice.MyObject, true, true)[-1]
return MERGE(MyVertice , {LatestValue:{[latestDate]: NOT_NULL(MyVertice.MyObject[latestDate],0)}})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 11:43:22