在ArangoDB AQL中,如何更新每个遍历对象的字段,而不考虑集合?

在ArangoDB AQL中,如何更新每个遍历对象的字段,而不考虑集合?,arangodb,aql,Arangodb,Aql,UPDATE语句需要集合名称。在图形中,我希望遍历一条边并更新访问的每个顶点 比如: 对于1..50入站'pmconfig/6376876'pm_内容选项{uniqueVertices:“global”}[更新v.contentsChanged=true] 由于顶点可能位于不同的集合中,是否必须将对象划分为每个集合列表?无法使用动态(运行时)集合名称更新文档。例如,以下AQL查询将不会编译: FOR v IN 1..50 INBOUND 'pmconfig/6376876' pm_content

UPDATE语句需要集合名称。在图形中,我希望遍历一条边并更新访问的每个顶点

比如: 对于1..50入站'pmconfig/6376876'pm_内容选项{uniqueVertices:“global”}[更新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" 
    ]    
  }  
]

使用结果结构,可以轻松构造后续更新查询并发送更新。

谢谢。我只是想得到第二个意见,我需要先做一个每个收集清单。