簡體   English   中英

在ArangoDB AQL中,無論集合如何,如何更新每個遍歷對象的字段?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM