Firestore 数组包含元素列表的查询

Zha*_*nov 2 firebase google-cloud-firestore

我有一个 Firestore 文档,其中包含如下数组:

Array:                    Array:
[1, 2, 3, 4, 5, 6, 7] or ['Zhangir', 'Erasyl', 'Arman']
Run Code Online (Sandbox Code Playgroud)

我需要检查该文档是否包含任何给定的数组。例如:

[1, 2, 3, 4] or [1, 2, 7] or ['Zhangir', 'Arman'] and so on
Run Code Online (Sandbox Code Playgroud)

并仅在完全匹配时才返回它。arraycontains [1], arraycontains[2]...但考虑到我的数组可以有100个元素长,每次都说起来很不方便。有什么办法可以对很多值进行复合查询吗?我找到的所有信息都说我不能,但也许有办法。

从我的例子来看,那就是

Firestore.instance.collection("Querys")
.where('array', arrayContains: [1, 2, 3, 4, 5]);
Run Code Online (Sandbox Code Playgroud)

或者

Firestore.instance.collection('Querys')
.where('array', arrayContains: ['Zhangir', 'Arman']);
Run Code Online (Sandbox Code Playgroud)

而不是类似的东西

Firestore.instance.collection('Querys')
.where('array', arrayContains: 'Zhangir')
.where('array', arrayContains: 'Arman');
Run Code Online (Sandbox Code Playgroud)

Fra*_*len 7

Firestore 现在可以检查数组字段上的这些条件:

  • 该字段是否包含带有 的特定值array-contains
  • 该字段是否包含带有 . 的任何值列表(最多 10 个)array-contains-any

您所描述的是array-contains-all类似操作,目前不存在。而且您无法通过组合多项array-contains检查来创建它,因为查询中只能包含其中一项。您可能想为其提交功能请求。

今天最好的选择是:

  1. 从数组中选择一个值,并array-contains使用该值执行查询。然后,您在应用程序代码中进行额外的过滤。
  2. 使用映射来存储值,然后使用多个where value == true条件,如此问题的答案所示:Firestore: Multiple 'array-contains'