首页 > 解决方案 > 如何在 Flutter 中使用查询访问 Cloud Firestore 的数组索引?

问题描述

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

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

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

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

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

简单的火库结构

标签: firebasedartfluttergoogle-cloud-firestore

解决方案


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();

推荐阅读