ArangoDb - 如何在限制过滤结果之前计算过滤结果的数量

Posted

技术标签:

【中文标题】ArangoDb - 如何在限制过滤结果之前计算过滤结果的数量【英文标题】:ArangoDb - How to count number of filtered results before limiting them 【发布时间】:2017-01-23 17:14:28 【问题描述】:
db.query(aql `
   FOR doc IN $collection 
     FILTER REGEX_TEST(CONCAT(VALUES(doc, true)), $queryStr, true)
       SORT doc[$sortBy] $dir
         LIMIT $start, count 
           RETURN doc._key
        `)
        .then(cursor => 
            cb(cursor._result)
        , err => console.log(err))

我有上面的 AQL 查询, 我想在限制每页结果之前计算过滤结果的总数(出于分页目的)

我认为问题类似于mysql - How to count rows before pagination?, Find total number of results in mySQL query with offset+limit

想用 AQL 在 ArangoDb 中做

部分解决方案可能是这个How to count number of elements with AQL?

那么,对于我的 AQL 要求,最有效/最佳的解决方案是什么?

【问题讨论】:

答案是否满足您的需求?如果没有,缺少什么?如果,你能把它标记为接受吗? 请提供更多帮助.. :) 请给我一个最小的例子来说明如何使用 ArangoJS 实现上述目标 【参考方案1】:

您可以在创建光标的选项 中将标志fullCount 设置为true。然后结果将有一个带有子属性statsfullCount 的额外属性。

然后您可以通过cursor.extra.stats.fullCount 获取fullCount-属性。此属性包含应用查询中最后一个LIMIT 之前结果中的文档数。 see HTTP documentation

此外,您应该使用explain feature 来分析您的查询。在您的情况下,您的查询将始终进行完整的集合扫描,因此无法很好地扩展。

更新

我在您的代码中添加了 fullCount 标志。请记住,fullCount 属性仅在LIMIT 之前的结果数量高于之后的结果时才会出现。

db.query(aql ` 
  FOR doc IN $collection 
    FILTER REGEX_TEST(CONCAT(VALUES(doc, true)), $queryStr, true)
      SORT doc[$sortBy] $dir
        LIMIT $start, count 
          RETURN family: doc.family, group: doc.group `, count:true, options:fullCount:true )
.then(cursor =>  console.log(cursor) , err => console.log(err))

【讨论】:

请提供更多帮助.. :) 请给我一个最小的例子来说明如何使用 ArangoJS 实现上述目标 我怎样才能在这个中设置标志.. db.query(aql ` FOR doc IN $collection FILTER REGEX_TEST(CONCAT(VALUES(doc, true)), $queryStr, true) SORT doc[$sortBy] $dir LIMIT $start, count RETURN family: doc.family, group: doc.group `, count:true).then(cursor => console. log(cursor) , err => console.log(err)) 如何设置上面的计数标志? 上面代码中的 count:true 什么都不做.. :( 那么从上面的代码中设置标志和获取 fullcount 的正确方法是什么...?

以上是关于ArangoDb - 如何在限制过滤结果之前计算过滤结果的数量的主要内容,如果未能解决你的问题,请参考以下文章

如何限制 DBeaver 数据编辑器以限制结果集大小?

如何使用 Django Rest 过滤器限制查询结果

如何对 cloudkit 中给出的结果数量设置限制

HaploView使用-OutofMemory

在 arangodb 中存储日期的最佳方法

obiee12c 仪表板提示在分析过滤器之前运行