如何在firebase中执行此查询?

如何在firebase中执行此查询?,firebase,google-cloud-firestore,Firebase,Google Cloud Firestore,假设我有一个文档集合,每个文档都有两个类型为number的字段(a和B)。 我想查询满足以下等式的文档:A+B=5 我怎样才能做到这一点呢?仅使用这两个字段是不可能的。Firestore不提供任何此类聚合查询。您唯一的选择是在文档中存储另一个字段,该字段具有预计算的A和B之和,然后查询另一个字段是否与您要查找的总和相等。好的,但我想了解他们在这里做出了什么样的牺牲,为什么不提供一个内置的查询方法来实现这一点呢?因为我认为这是很常见的。我的意思是,如果实现此功能的问题与字段索引有关,那么它们可能会

假设我有一个文档集合,每个文档都有两个类型为number的字段(a和B)。 我想查询满足以下等式的文档:A+B=5


我怎样才能做到这一点呢?

仅使用这两个字段是不可能的。Firestore不提供任何此类聚合查询。您唯一的选择是在文档中存储另一个字段,该字段具有预计算的A和B之和,然后查询另一个字段是否与您要查找的总和相等。

好的,但我想了解他们在这里做出了什么样的牺牲,为什么不提供一个内置的查询方法来实现这一点呢?因为我认为这是很常见的。我的意思是,如果实现此功能的问题与字段索引有关,那么它们可能会提供一种特殊类型的索引,该索引与保存此聚合的隐藏字段相关联。也许除此之外,他们肯定能弄明白。Firestore的设计是为了在一个集合中大规模扩展数十亿个文档。如果它必须扫描每一份文档,把每个数字加起来,这将是非常昂贵的,而且不能很好地扩展。所以它不允许这些查询,或者任何需要扫描所有文档的查询。它必须能够使用索引来查找文档。这就是我建议您存储一个预计算字段的原因,该字段将被索引,并且查询将工作。无论何时更改文档,保存聚合的字段都将更改。多写一封就行了。我可以实现一个可以做到这一点的函数,但我说的是一种更通用的方法,使用新引入的索引类型,并可能引入隐藏字段。这是不太可能发生的(相信我,我曾经是Firebase团队的成员)。您必须将额外字段与其他两个字段的总和一起存储,并使其保持最新。这对于像Firestore这样的nosql类型的数据库很常见。