Firestore事务在单个事务中更新多个文档

suh*_*l c 13 javascript firebase google-cloud-firestore

如何通过使用我搜索的单个事务更新firestore中的多个文档,但我没有得到任何答案.是否可以在单个交易中更新多个文档?我知道它可以通过批量写入来完成.

suh*_*l c 8

我想到了

我们可以在事务中使用多个ref

var userSuhail = db.collection("users").doc("suhail");
var userSam = db.collection("users").doc("sam");
var userJohn = db.collection("users").doc("john");
var userAlfred = db.collection("users").doc("Alfred");
var userAlfredDetails = db.collection('userdetails').doc('Alfred');

db.runTransaction(function (transaction) {
  return transaction.get(userJohn).then(function (sDoc) {
    var age = sDoc.data().age + 1;
    transaction.set(userAlfred, {
      name: 'Alfred',
      age,
      details: userAlfredDetails,
    });
    transaction.set(userAlfredDetails, {
      address: 'Alfred Villa',
    });
    transaction.update( userJohn   , { age, }, );
    transaction.update( userSuhail , { age, }, );
    transaction.update( userSam    , { age, }, );
    return age;
  });
}).then(function (age) {
  console.log("Age changed to ", age);
}).catch(function (err) {

  console.error(err);
});
Run Code Online (Sandbox Code Playgroud)

通过上面的代码,事务更新了所有用户的年龄

  • 这是正确的答案?你没有回答你自己的问题:)你问'如何在一次交易中读取多个文件?' 相反,您的解决方案显示了如何在单次读取后编写/更新多个文档... (13认同)
  • @rendom是的,我们可以在事务中读取多个文档,比如db.runTransaction((transaction)=> {return Promise.all([transaction.get(docref1),transaction.get(docref2)]).then((docs) => {let doc1 = docs [0];让doc2 = docs [1]; (7认同)