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

时间:2016-08-18 14:32:37

标签: arangodb

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

假设我创建了数组let A = 1..count(C)。如何用C给A中的每个文件一个数字,确保A的每个元素只用一次?

1 个答案:

答案 0 :(得分: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