Firebase 如何在Flatter中使用查询访问云Firestore的数组索引?

Firebase 如何在Flatter中使用查询访问云Firestore的数组索引?,firebase,dart,flutter,google-cloud-firestore,Firebase,Dart,Flutter,Google Cloud Firestore,我在文档中有字段users,该字段在数组中包含两个元素。我必须检查这个数组中有两个特定的值 首先,我为此使用了两次array contains方法,但出现了错误 如何访问云Firestore中数组字段的索引 以下代码是我的方法,它不起作用: QuerySnapshot querySnapshot = await sl.get<FirebaseAPI>().getFirestore() .collection('messages') .where('users'

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

首先,我为此使用了两次
array contains
方法,但出现了错误

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

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

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

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

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();
QuerySnapshot QuerySnapshot=wait sl.get().getFirestore()
.collection('消息')
.where('users.user1ID',isEqualTo:true)
.where('users.user2ID',isEqualTo:true)
.getDocuments();

最初,我考虑过这个解决方案。好的,我明白了!谢谢!亚历克西还不到可以投票的级别,但我现在可以了,所以我投票了