如何在ArangoDB的AQL中为map[string][]string字段追加元素(避免覆盖)
解决ArangoDB数组追加而非覆盖的问题
没问题,你的问题在于直接用UPDATE替换了整个text.june 2018字段,导致原有数组被覆盖。要实现追加元素到指定数组,你需要使用ArangoDB AQL的PUSH()函数,它专门用于向数组末尾添加元素。
正确的AQL查询语句
FOR doc IN annotation_info FILTER doc.annotation_id == '1234' UPDATE doc WITH { text: { "june 2018": PUSH(doc.text.`june 2018`, "test") } } IN annotation_info
关键说明
PUSH()函数的作用:第一个参数是目标数组(这里是doc.text.june 2018,因为键名包含空格,必须用反引号``包裹),第二个参数是要追加的元素"test"`。它会返回原数组加上新元素的新数组,而非直接修改原数据(符合AQL的函数式特性)。- 处理数组不存在的情况:如果担心
text.june 2018可能还未创建(比如首次追加),可以用COALESCE()设置默认空数组,避免报错:FOR doc IN annotation_info FILTER doc.annotation_id == '1234' UPDATE doc WITH { text: { "june 2018": PUSH(COALESCE(doc.text.`june 2018`, []), "test") } } IN annotation_info
执行这条语句后,你的文档就会变成期望的结果:
{"annotation_id": "1234", "text": {"june 2018": ["gain of revenue for this month", "test"]}, "user_id": ""}
内容的提问来源于stack exchange,提问作者stackoverflow
相关产品推荐
相关产品推荐

