在Appwrite文档查询中,我看不到如何根据过滤器为集合执行计数(*)。在添加或删除文档时,是否可能或需要手动处理计数?
发布于 2022-07-08 21:39:41
简而言之,从0.15.X开始,没有公共API可以使用客户端API获得大于5000个文档的精确计数。这是因为执行计数需要对每个数据库对象进行迭代,并且可能是一个昂贵的数据库操作。
实现目标的一种方法是在需要计数时,使用基于游标的分页来迭代所有数据。
import { Databases } from "appwrite";
const databases = new Databases(client, "[DATABASE_ID]"); // 'client' comes from setup
let count = 0
const queries = [];
const limit = 100;
const offset = undefined;
let cursor = undefined;
while (true) {
const page = await databases.listDocuments('movies', queries, limit, offset, cursor);
const length = results.documents.length;
if (length === 0) break;
count += length;
cursor = results.documents[results.documents.length - 1].$id;
}
console.log(count);有关更多信息,请参考分页文档。正如你可以想象的那样,这可能是缓慢和低效的。
更好的方法是维护一个包含所有计数的元数据集合。您可以让Appwrite函数来增加文档创建的计数。当客户端需要信息时,它可以从元数据集合中获取数据。
https://stackoverflow.com/questions/72909141
复制相似问题