我正在尝试使用AQL更新内嵌数组中json文件的属性。如何使用下面的AQL更新“home”类型位址的“addressline”?
用户:
{
name: "test",
address: [
{"addressline": "1234 superway", type:"home"},
{"addressline": "5678 superway", type:"work"}
]
}
目前为止的AQL尝试
for u in users
for a in u.address
FILTER a.type='home'
UPDATE u WITH {<What goes here to update addressline?>} in users
谢谢你的帮助。
此致,Anjan
2条答案
按热度按时间vnzz0bqm1#
要做到这一点,我们必须使用临时变量。我们将收集其中的子列表并对其进行修改。我们选择一个简单的布尔过滤条件,以使查询更容易理解。
首先,让我们创建一个包含示例的集合:
以下是保留 alteredList 上的 subList 以便稍后更新的查询:
尽管查询现在可以正常工作:
这个查询可能很快就会成为性能瓶颈,因为它会修改集合中的所有文档**,而不管值是否更改**。因此,如果我们真的更改了文档的值,我们只想 UPDATE 这些文档。因此,我们使用第二个 FOR 来测试 subList 是否会被更改:
yh2wf1be2#
ArangoDB现在支持子集索引。以下查询基于dothebart的答案:
注意:不要忘记在
subList[*].filterByMe
上创建一个hash
索引: