在FiRestore中,如何获取集合中的文档总数?

例如,如果我有

/people
    /123456
        /name - 'John'
    /456789
        /name - 'Jane'

我想查询一下我有几个人,可以得到2个人.

我可以对/People执行查询,然后获得返回结果的长度,但这似乎是浪费,特别是因为我将在更大的数据集上执行此操作.

推荐答案

您目前有3个选项:

Option 1: Client side

这基本上就是你提到的方法.在客户端 Select All From Collection(全部来自集合)和Count(计数).对于较小的数据集,这可以很好地工作,但如果数据集较大,则显然不起作用.

Option 2: Write-time best-effort

使用这种方法,您可以使用云函数为集合中的每次添加和删除更新计数器.

这对于任何数据集大小都很有效,只要添加/删除操作仅以低于或等于每秒1的速度进行即可.这使您可以阅读单个文档,从而立即计算出almost current.

如果需要超过每秒1个,则需要实现distributed counters per our documentation个.

Option 3: Write-time exact

在您的客户端中,您可以在添加或删除文档的同时更新计数器,而不是使用云函数.这意味着计数器也将是最新的,但您需要确保在添加或删除文档的任何位置都包含此逻辑.

与选项2一样,如果希望超过每秒,则需要实现分布式计数器

Database相关问答推荐

触发器作为完整性的判断约束

网络分区恢复后副本的更新数据发生了什么

即使将enable_seqscan设置为关闭,也未使用数组列上的 GIN 索引?

如何将表字段的默认值设置为 0.00?

时间数据库设计,有一个转折(live vs draft rows)

数据库模式 - location

无法使用命令行运行 liquibase

SQL Select 用字符串替换整数

Spring Boot:如何使用多个模式并在运行时动态 Select 使用哪一个

每个请求可以多次查询 MongoDB 吗?

MySQL 中的多个 OR 子句

如何在 MSSQL 2005 中创建递归查询?

ER图中的一对多关系

更新列的子字符串

连接池策略效果怎样?

我如何知道何时索引列以及使用什么索引?

Select * 和 Select [列出每个列] 之间有区别吗

PDO SQL 状态00000但仍然错误?

在数据库中存储年份

如何使用 PL/SQL Developer 连接到远程 Oracle DB?