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
希望在ArangoDb中使用AQL
部分解决方案可能是How to count number of elements with AQL?
那么,AQL对我的要求的有效/最佳解决方案是什么?
答案 0 :(得分:8)
您可以在选项中设置标记fullCount
,以便将光标创建为true。然后,结果将具有子属性stats
和fullCount
的额外属性。
然后,您可以通过fullCount
获取cursor.extra.stats.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))