我正在尝试从查询中读取而不是从事务中的单个文档中读取。
我的写操作取决于集合中当前数据的结果。但是我似乎了解到,至少对于移动和Web客户端,您不允许阅读查询,而只能阅读单个文档。
如果是这样,由于不知道我想提前阅读哪些文档,我该如何实现?
具体地说,我指的是this video from the Firebase team,在9:38
答案 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');
})
})