AQL - 如何为集合 C 中的每个文档分配一个数组中的唯一值?

AQL - How to assign each document in a collection C a unique value from an array?

如何为集合 C 中的每个文档分配数组中的唯一值?

假设我创建了数组 let A = 1..count(C)。我怎样才能给 C 中的每个文档一个来自 A 的编号,确保 A 的每个元素只使用一次?

不幸的是,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保存了[=的所有文档键15=]。范围为 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