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对我的要求的有效/最佳解决方案是什么?
您可以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)