flutter - 我可以从匹配多个文档的查询中读取 Flutter 中的 Firestore 事务吗
问题描述
我正在尝试从查询中读取,而不是从事务中的单个文档中读取。
我的写入取决于集合中当前数据的结果。但我似乎明白,至少对于移动和网络客户端,您不允许从查询中读取,只能从单个文档读取中读取。
如果是这样,由于我不知道要提前阅读哪些文件,我将如何实现?
具体来说,我指的是 Firebase 团队的这段视频,时间为 9:38
解决方案
实际上,您无法从事务中的查询中读取文档,只能读取单个文档。
因此,您必须使用您的条件运行查询以确定文档 ID,然后使用单个更新或一个或多个批量写入而不是事务来更新文档,如果您需要这些写入是原子的。
这是一个代表我的意思的片段(在 Javascript 中,不是 Flutter,但对于一个实际示例来说已经足够了):
var db = firebase.firestore();
const newDocumentBody = {
message: 'hello world'
}
db.collection('myCollection').where('message', '==', 'hello').get().then(response => {
let batch = db.batch();
response.docs.forEach((doc) => {
const docRef = db.collection('myCollection').doc(doc.id);
batch.update(docRef, newDocumentBody);
})
batch.commit().then(() => {
console.log('updated all documents inside myCollection');
})
})
推荐阅读
- python - Python - 如果从另一个目录运行,找不到图像文件?
- node.js - 将 Webpack 与 Auth0 集成或如何将其他 Node.js 模块添加到 IBM Cloud Functions
- javascript - 每个属性的模态屏幕
- node.js - Gulp Fontello 使用 adm-zip 出错,最近的现象
- android - 这些问题中的一个或多个是违反政策的。您必须解决这些问题。阿德莫布?
- python - 无法在 tkinter 框架中检查多个 Checkbutton
- javascript - react-syntax-highlighter 中的高亮行
- snowflake-cloud-data-platform - Snowflake JDBC 驱动程序在每个 SAML 连接上将用户重定向到浏览器,只是为了显示一条消息。在 3.6.7 中修复并在 3.12.8 中再次损坏
- javascript - Angular 10 中的动画
- php - 如何在不发出任何外部网络请求的情况下,在 PHP 中将字符串从一种语言翻译成另一种语言?