我在文档中有字段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();
最佳答案
无法在 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();
关于firebase - 如何在 Flutter 中使用查询访问 Cloud Firestore 的数组索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55180156/