我在Appwrite文档查询中没有看到如何基于过滤器对集合执行计数(*)。是否有可能或者我需要在添加或删除文档时手动处理计数?
总之,从0.15开始。在X中,没有公共API可以使用Client 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 Functions来增加文档创建的计数。当客户端需要信息时,它可以从元数据集合中获取数据。