1
如何分配集合中的每個文檔C數組中的唯一值?我想說我創建了數組let A = 1..count(C)
。我怎樣才能從A中的每個文件中給出一個數字,確保A的每個元素只使用一次?AQL - 如何爲集合中的每個文檔分配一個數組中的唯一值?
如何分配集合中的每個文檔C數組中的唯一值?我想說我創建了數組let A = 1..count(C)
。我怎樣才能從A中的每個文件中給出一個數字,確保A的每個元素只使用一次?AQL - 如何爲集合中的每個文檔分配一個數組中的唯一值?
不幸的是,在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
我找不到迭代器計數器'N',有時可像第二個參數'爲d,正在文檔中(但不在AQL中),所以我被卡住了。然後答案就像傳統的循環一樣簡單:)關於性能的好信息。 – specimen
第二個和第三個參數目前僅由[遍歷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