我可以从与多个文档匹配的查询中读取Flutter中的Firestore交易吗

时间:2020-07-16 02:07:03

标签: flutter google-cloud-firestore

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

如果是这样,由于不知道我想提前阅读哪些文档,我该如何实现?

具体地说,我指的是this video from the Firebase team,在9:38

1 个答案:

答案 0 :(得分:1)

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

因此,如果您需要原子写操作,则必须根据条件运行查询以确定文档ID,然后使用单个更新或一次或多次批处理写而不是事务来更新文档。< / p>

这是一个代表我的意思的代码片段(在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');
    })
})