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();
最初,我考虑过这个解决方案。好的,我明白了!谢谢!亚历克西还不到可以投票的级别,但我现在可以了,所以我投票了