Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arangodb AQL-如何从数组中为集合C中的每个文档分配唯一值?_Arangodb - Fatal编程技术网

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

Arangodb AQL-如何从数组中为集合C中的每个文档分配唯一值?,arangodb,Arangodb,如何从数组中为集合C中的每个文档分配唯一值 假设我创建了数组让A=1..count(C)。我如何从a中给C中的每个文档一个数字,确保a中的每个元素只使用一次?不幸的是,AQL中没有类似Python的迭代器enumerate()和zip(),这将使这非常简单和高效。但是,这仍然是可能的,但对于非常大的数据集来说,这可能是一项代价高昂的操作(主要是内存密集型操作),因为所有文档密钥都需要提取并存储在内存中: LET arr = RANGE(1, LENGTH(C) * 2, 2) LET docs

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


假设我创建了数组
让A=1..count(C)
。我如何从a中给C中的每个文档一个数字,确保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
保存
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,n的
(但不在AQL中),因此我被卡住了。然后答案就像传统的for循环一样简单:)关于性能的良好信息。第二个和第三个参数当前由一个only发出。如果您正在创建一个新集合,并且希望将数字自动递增为
\u键
,请查看。请注意,
\u键
仍将存储为字符串,但如有必要,您可以将其转换为数字。