目前,我只知道如何更新 ArangoDB 中的顶级属性。虽然我希望将来有替代方案引起我的注意,但这里有一些适合您的方案的选项。
使用 MERGE 更新
在此示例中,我们通过重写数组并在满足条件时使用MERGE 函数来更新顶级departments 属性。
LET company = DOCUMENT("companies/abc")
UPDATE company WITH {
departments:
(FOR department IN company.departments
RETURN department.id == "456" ?
MERGE(department, {name: "Department 789"}) : department)
} IN companies
使用替代数据模型
以上示例假设部门数据嵌入在公司文档中。考虑以下几点:
“公司”集合
{
"_key": "abc",
"_id": "companies/abc",
"label": "Company ABC"
}
“部门”集合(单独的文档)
{
"_key": "456",
"_id": "departments/456",
"company": "companies/abc",
"name": "Department 456"
}
{
"_key": "123",
"_id": "departments/123",
"company": "companies/abc",
"name": "Department 123"
}
让公司 #ABC 与部门:
LET company = DOCUMENT("companies/abc")
LET departments =
(FOR department IN departments
FILTER department.company == company._id
RETURN department)
RETURN MERGE(company, {departments})
结果:
{
"_id": "companies/abc",
"_key": "abc",
"label": "Company ABC",
"departments": [
{
"_key": "456",
"_id": "departments/456",
"company": "companies/abc",
"name": "Department 456"
},
{
"_key": "123",
"_id": "departments/123",
"company": "companies/abc",
"name": "Department 123"
}
]
}
更新部门#456:
LET department = DOCUMENT("departments/456")
UPDATE department WITH {name: "Department 789"} IN departments
请注意,您需要在departments 集合中的company 属性上添加索引。您可以在此处获取有关索引的详细信息:
https://docs.arangodb.com/3.3/Manual/Indexing/WhichIndex.html
您必须权衡这两种模型的优缺点。