[英]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.