繁体   English   中英

ArangoDB获取文档索引

[英]ArangoDB Getting the Index of a Document

有没有一种方法可以获取ArangoDB中特定文档的索引,以便在LIMIT操作中使用它? 例如,假设我通过ID来查找Document并发现它的索引为534,那么我将像这样使用它:

LIMIT 534, 30

...并在查询完文件后返回下30个文件。 但是我似乎找不到使用AQL获取文档索引的方法...

问题是, 下一份文件应该真正意味着什么。

如果这里的下一个表示文档密钥索引顺序

文档在集合中没有特定的“顺序”或“索引”。 集合中的文档通过未排序的主索引中的_key / _id属性进行组织。

要获得下一个文档键(假设按字典顺序排序的键),人们将必须阅读集合中的所有键,对其进行排序,并以某种方式找到当前文档的索引以获取下一个键。 这将是非常低效的。

集合上的其他索引是可选的,因此不能依赖于它们的存在和可用于此类查询。

如果这里的下一个意味着插入或更新命令,那么也没有明智的方法来获取下一个文档。

一种变通办法是在某个文档属性上使用排序(即,跳过列表)索引,最好是唯一的索引,并在每次插入文档时填充它(如果更新也应更改文档的顺序 ,则可以进行更新)。

然后查找下一个文档,执行以下操作:

  • 首先通过其_id_key找到所需的文档,然后将文档数据提取到应用程序中

  • 提取具有排序索引的document属性,并在后续的AQL查询中使用它,如下所示

这将允许您查找原始文档之后的文档,但是,您必须以某种方式维护order属性:

FOR doc IN collection
  FILTER doc.`order` > @value
  LIMIT 0, 30
  RETURN doc

如果您的文档具有某些可用于订购的属性,这将很容易做到,但如果文档不具有此类属性,这将是一个笨拙的解决方案。

如果您不应用anny排序过滤器,则ArangoDB不会警告特殊序列。

所以,做

db._create("testCollection");
for (var i = 0; i < 10; i ++) db.testCollection.save({which: i})
db._query("FOR i IN testCollection RETURN i.which").toArray()

将给您一个相当随机的序列。

db._query("FOR i IN testCollection SORT i.which RETURN i.which").toArray()

将为您提供良好的结果。

然后,您可以执行以下操作:

db._query("FOR i IN testCollection SORT i.which LIMIT 3, 5 RETURN i.which").toArray()

有极限地工作。

但是,您也可以使用游标 获取部分结果

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM