我想获得<ID>
from数据库中存在的所有文档的最大值。
样本文件 -
<root>
<ID>3253523</ID>
<value1>.....</value1>
<value2>.....</value2>
<value3>.....</value3>
<value4>.....</value4>
.....................
</root>
我的数据库拥有超过100万条记录,我想获取其中具有最大价值的ID。
我不能使用fn:last()
,因为它不会给我最大的价值。
我需要使用该值来创建一个INCREMENTAL COUNTER(最大值将成为我对COUNTER的第一个值)。
是否有任何建议以有效的方式获取该值?因为我不能做超过100万条记录的cts:search()
,然后做orderby ascending
并获取最后一个值。
您可以向ID
元素添加元素范围索引,然后使用cts:values
函数以降序检索第一个索引值。
例:
(: assuming a path range index for an int scalar at path '/root/ID' :)
for $i in 1 to 100
let $doc := <root><ID>{$i}</ID></root>
return
xdmp:document-insert("/test/doc-" || $i, $doc, (), "test");
(cts:values(cts:path-reference("/root/ID"), (), "descending"))[1]
当你需要获得包含日期,价格,数量或其他类型价值的元素的最大值或其他集合时,以利亚的答案就足够了。
对于序列号的具体情况,还有更多内容。如何在并行摄取时保证线程间的唯一性?这是一个非常重要的问题,出于性能原因,我们通常建议不要使用序列号。请改用随机数字。它使碰撞几乎不可能,并防止争用导出max + 1 ID。
我创建了一个库,允许各种方式生成唯一标识符,并详细说明每个标识符的优缺点:
https://github.com/grtjn/ml-unique#how-it-works
HTH!