[英]In ArangoDB AQL how do I update fields of every traversed object, regardless of collection?
UPDATE语句需要一个集合名称。 在图形中,我想遍历一条边并更新访问的每个顶点。
类似于:FOR v IN 1..50 INBOUND'pmconfig / 6376876'pm_content选项{uniqueVertices:“ global”} [update v.contentsChanged = true]
由于顶点可以在不同的集合中找到,我是否必须将对象划分为每个集合列表?
无法使用动态(运行时)集合名称更新文档。 例如,以下AQL查询将不会编译:
FOR v IN 1..50 INBOUND 'pmconfig/6376876' pm_content
UPDATE v WITH { contentsChanged : true } IN PARSE_IDENTIFIER(v._id).collection
原因是UPDATE和其他数据修改语句要求在查询编译时知道其集合名称。 当然,使用绑定参数将起作用,但不允许运行时表达式。
一种解决方法是多次运行遍历,每次都使用硬编码集合进行更新。 这仍然需要事先了解集合名称。 如果图形在以下之间进行更改,则可能还会存在一致性问题:
FOR v IN 1..50 INBOUND 'pmconfig/6376876' pm_content
FILTER PARSE_IDENTIFIER(v._id).collection == 'vertexCollection1'
UPDATE v WITH { contentsChanged : true } IN vertexCollection1
FOR v IN 1..50 INBOUND 'pmconfig/6376876' pm_content
FILTER PARSE_IDENTIFIER(v._id).collection == 'vertexCollection2'
UPDATE v WITH { contentsChanged : true } IN vertexCollection2
...
另一个解决方法是让遍历已经生成每个集合列表,并对每个集合发出后续查询。 例如,以下查询应返回每个集合要更新的键:
FOR v IN 1..50 INBOUND 'pmconfig/6376876' pm_content
LET parts = PARSE_IDENTIFIER(v._id)
COLLECT collection = parts.collection INTO keys = parts. key
RETURN { collection, keys }
结果示例:
[
{
"collection" : "vertexCollection1",
"keys" : [
"abc"
]
},
{
"collection" : "vertexCollection2",
"keys" : [
"xyz",
"ddd"
]
}
]
使用结果结构,可以轻松构造后续更新查询并发送更新。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.