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

Yuv*_*raj 5 pagination filter limit arangodb aql

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))
Run Code Online (Sandbox Code Playgroud)

我有上面的AQL查询,我想在限制每页结果之前计算过滤结果的总nuber(For Pagination Purpose)

我认为问题类似于这个MySQL - 如何在分页前计算行数?,使用offset + limit查找mySQL查询中的结果总数

想用AQL在ArangoDb中做

和部分解决方案可能是这个如何计算AQL的元素数量?

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

mpv*_*989 8

您可以fullCount在用于创建光标的选项中设置标志.然后结果将具有子属性stats和的额外属性fullCount.

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

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

更新

我在您的代码中添加了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))
Run Code Online (Sandbox Code Playgroud)