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

时间:2019-12-02 09:08:07

标签: firebase google-cloud-firestore

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

Array:                    Array:
[1, 2, 3, 4, 5, 6, 7] or ['Zhangir', 'Erasyl', 'Arman']

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

[1, 2, 3, 4] or [1, 2, 7] or ['Zhangir', 'Arman'] and so on

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

在我的示例中

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

Firestore.instance.collection('Querys')
.where('array', arrayContains: ['Zhangir', 'Arman']);

而不是类似

Firestore.instance.collection('Querys')
.where('array', arrayContains: 'Zhangir')
.where('array', arrayContains: 'Arman');

1 个答案:

答案 0 :(得分:0)

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

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

您要描述的是类似array-contains-all的操作,目前尚不存在。而且,您无法通过组合多个array-contains检查来创建它,因为查询中只能包含其中一项。您可能需要file a feature request

今天最好的选择是:

  1. 从数组中选择一个值,然后使用该值执行array-contains查询。然后,您可以在应用程序代码中进行其他过滤。
  2. 使用地图存储值,然后使用多个where value == true条件,如对此问题的回答所示:Firestore: Multiple 'array-contains'