web-dev-qa-db-fra.com

Firestore transaction met à jour plusieurs documents en une seule transaction

Comment puis-je mettre à jour plusieurs documents dans Firestore en utilisant une seule transaction que j'ai recherchée mais je n'ai pas eu de réponses Est-il possible de mettre à jour plusieurs documents en une seule transaction? Je sais que cela peut être fait par lot écrit.

10
suhail c

Je l'ai compris 

nous pouvons utiliser plusieurs références dans une transaction

var me = db.collection("users").doc("suhail");
var v = db.collection("users").doc("sam");
var s = db.collection("users").doc("john");
var t = db.collection("users").doc("Alfred");
var tadd = db.collection('userdetails').doc('Alfred');

db.runTransaction(function(transaction) {
  return transaction.get(s).then(function(sDoc) {
    var age = sDoc.data().age + 1;
    transaction.set(t,{name:'Alfred',age:age,details:tadd});
    transaction.set(tadd,{address:'Alfred Villa'});
      transaction.update(s, {
        age: age
      });
      transaction.update(me, {
        age: age
      });
      transaction.update(v, {
        age: age
      });
      return age;
    });
  }).then(function(age) {
    console.log("Age changed to ", age);
  }).catch(function(err) {

    console.error(err);
 });

par le code ci-dessus, la transaction met à jour l'âge de tous les utilisateurs

5
suhail c

Preuve de concept:

var transaction = firestore.runTransaction( t => {
  return t.get(eRef)
    .then(snapshot => {
      snapshot.forEach(doc => {
        var employee = doc.data();
        if(employee.status !== 'Off work') {
          t.update(doc.ref, {
            status: 'Off work',
            returnTime: '8 am'
          })
        }
      })
    })
}).then(result => {
  console.log('Transaction success!')
}).catch(err => {
  console.log('Transaction failure: ', err)
});
0
Sean Russell