2016-08-18 43 views

回答

1

不幸的是,在AQL中沒有類似Python的迭代器enumerate()zip(),這會使它非常簡單和高效。它仍然是可能的。然而,也可以是非常大的數據集的一個代價高昂的操作(主要是內存密集型),因爲所有文件的密鑰需要在內存中獲取並存儲:

LET arr = RANGE(1, LENGTH(C) * 2, 2) 
LET docs = (FOR doc IN C RETURN doc._key) 
FOR n IN 0..LENGTH(docs)-1 
    UPDATE docs[n] WITH {number: arr[n]} IN test 
    RETURN NEW 

數組arr產生(這裏:與集合C中的文檔一樣多的奇數)以及變量docs保存所有文檔密鑰C。範圍0..n的循環,其中n = C中的文檔數目用於計數器n。然後,使用docs的第n個文檔密鑰來更新來自數組arr的第n個數字的文檔。

如果你想分配A = 1..LENGTH(C),然後稍微簡單查詢可用於:

LET docs = (FOR doc IN C RETURN doc._key) 
FOR n IN 1..LENGTH(docs) 
    UPDATE docs[n-1] WITH {number: n} IN test 
    RETURN NEW 
+0

我找不到迭代器計數器'N',有時可像第二個參數'爲d,正在文檔中(但不在AQL中),所以我被卡住了。然後答案就像傳統的循環一樣簡單:)關於性能的好信息。 – specimen

+0

第二個和第三個參數目前僅由[遍歷FOR循環](https://docs.arangodb.com/3.0/AQL/Operations/For.html)發出。如果你正在創建一個新的集合並希望自動遞增數字爲'_key',請查看[keyOptions](https://docs.arangodb.com/3.0/Manual/DataModeling/Collections/DatabaseMethods.html#create) 。請注意'_key'仍然會以字符串形式存儲,但如果需要,您可以將其轉換爲數字。 – CoDEmanX

相關問題