firebase - 如何在 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();
解决方案
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();
推荐阅读
- surveyjs - 从上一个问题中获取选项以及其他选项
- sql - 使用 CTE 根据 SQL 中的一个列值或条件更改特定列中的所有值
- php - 如何从嵌套 cURL 中提取值
- reactjs - NextJs GraphQL 订阅:如何使用 Apolo 设置连接 api
- import - 错误:在 insta360 拼接器后导入 insta360 pro II 视频文件时出现“帧替换重复...”。修复没有帮助
- python - 尝试通过 GPIB 在 Laser 和 PC 之间进行可靠的通信
- android - android : 最后一次更新 chrome 是什么时候?
- python-3.x - sqlite3.InterfaceError:错误绑定参数 1 - 可能是不受支持的类型。很难找到我哪里出错了
- android - 命令失败:C:\Users\uesr\AppData\Local\Android\Sdk\platform-tools\adb
- reactjs - React 组件动画过渡