如何在Flutter中使用查询访问Cloud Firestore的数组索引?

时间:2019-03-15 10:09:33

标签: firebase dart flutter google-cloud-firestore

我在文档中有字段Movie,该字段在数组中包含两个元素。我必须检查特定的两个值在此数组中。

首先,我为此使用了两次users方法,但发生了错误。

如何在Cloud Firestore中访问数组字段的索引?

下面的代码是我的方法,它不起作用:

array-contains

simple firestore structure

1 个答案:

答案 0 :(得分:1)

您无法通过Firestore在其中使用基于数组内存在的元素的索引来查询数据库。的确,您在查询中不能链接多个array-contains调用,但是还有另一种解决方法可以帮助您实现同一目标。因此,您的数据库结构需要进行更改。因此,可以使用映射而不是使用数组,并且您的架构应类似于以下内容:

Firestore-root
   |
   --- messages (collection)
         |
         --- users (map)
              |
              --- user1ID: true
              |
              --- user2ID: true

现在这样的查询可以正常工作:

QuerySnapshot querySnapshot = await sl.get<FirebaseAPI>().getFirestore()
    .collection('messages')
    .where('users.user1ID',isEqualTo: true)
    .where('users.user2ID',isEqualTo: true)
    .getDocuments();