首页 > 解决方案 > 我可以从匹配多个文档的查询中读取 Flutter 中的 Firestore 事务吗

问题描述

我正在尝试从查询中读取,而不是从事务中的单个文档中读取。
我的写入取决于集合中当前数据的结果。但我似乎明白,至少对于移动和网络客户端,您不允许从查询中读取,只能从单个文档读取中读取。

如果是这样,由于我不知道要提前阅读哪些文件,我将如何实现?

具体来说,我指的是 Firebase 团队的这段视频,时间为 9:38

标签: fluttergoogle-cloud-firestore

解决方案


实际上,您无法从事务中的查询中读取文档,只能读取单个文档。

因此,您必须使用您的条件运行查询以确定文档 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');
    })
})

推荐阅读