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。然后结果将有一个带有子属性stats
和fullCount
的额外属性。
然后您可以通过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 - 如何在限制过滤结果之前计算过滤结果的数量的主要内容,如果未能解决你的问题,请参考以下文章