gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 17:44:42 24 4
gpt4 key购买 nike

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 满足我的要求的有效/最佳解决方案是什么?

最佳答案

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

然后您可以获得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))

关于filter - ArangoDb - 如何在限制过滤结果之前计算过滤结果的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39515149/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com