鉴于以下文档结构:
{
"_key": "abc",
"_id": "abc",
"label": "Company ABC",
"departments": [
{
"name": "Department 123",
"id": "123"
},
{
"name": "Department 456",
"id": "456"
}
]
}
你能告诉我为什么以下查询不起作用吗?错误消息是"missing document key" . 我在另一个SO(ArangoDB AQL: Update single object in embedded array)中找到了更长时间更复杂的解决方法,但我很好奇这个更简单的查询究竟出了什么问题 .
FOR c IN company
FOR d in c.deparments
FILTER d.id == “456”
UPDATE d WITH { name: “Department 789” } IN company
RETURN d
1 回答
目前,我只知道如何更新ArangoDB中的顶级属性 . 虽然我希望将来能引起我的注意,但是这里有一些适用于您的场景的选项 .
使用MERGE更新
在此示例中,我们通过重写数组并在命中条件时使用
MERGE
函数来更新顶级departments
属性 .使用替代数据模型
上面的示例假设部门数据嵌入在公司文档中 . 考虑以下:
"companies" collection
"departments" collection (separate docs)
Getting Company #ABC with Departments:
结果:
Updating Department #456:
请注意,您需要在
departments
集合中的company
属性上添加索引 . 您可以在此处获取有关索引的详细信息:https://docs.arangodb.com/3.3/Manual/Indexing/WhichIndex.html
你必须权衡两种模型的优缺点 .