首页 > 解决方案 > 来自firebase cloudstore查询中单个集合的多个'in'运算符

问题描述

我有一个 firebase 查询,(伪代码)

collectionName
, ref => ref
.where('field1' , 'in', array1)
.where('field2' , 'in' , array2)
.snapshotChanges()
.pipe(map(actions  => {
 return actions.map(a => {
    /* Some more Code */
  })
})

我需要将多个“in”运算符保留在来自 FB Cloud Firestore 的字段数据中。我在这样做时遇到了错误问题,因为单个查询中的运算符中不能有多个。有什么方法可以仅基于此查询从中获取记录。我无意在查询中使用单个 IN 运算符从 FB 获取所有记录并在客户端过滤它

标签: angularfirebasegoogle-cloud-firestore

解决方案


我需要将多个“in”运算符保留在来自 FB Cloud Firestore 的字段数据中。

文档很清楚这是不可能的。

请注意 in 和 array-contains-any 的以下限制:

  • in 和 array-contains-any 最多支持 10 个比较值。
  • 每个查询只能使用一个 in 或 array-contains-any 子句。您不能在同一查询中同时使用 in 和 array-contains-any。
  • 您可以将 array-contains 与 in 结合,但不能与 array-contains-any 结合。
  • 您不能按等式 (=) 或 in 子句中包含的任何字段对查询进行排序。

这些都是硬性限制。没有简单的解决方法。考虑重组您的数据,以便可以执行您想要执行的查询,或者执行多个查询,并计算它们结果的交集。


推荐阅读