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
如何为集合 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
.
如果要赋值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