With this code I can read and update single document in the transaction.
// Update likes in post
var docRef = admin
.firestore()
.collection(\"posts\")
.do
You can use batch to accomplish what you want.
var batch = db.batch();
var docRef = admin
.firestore()
.collection("posts")
.doc(doc_id);
var likes = ... // get the amount of likes
batch.update(docRef, { likes })
var profileRef = admin
.firestore()
.collection('profile')
.doc(profId)
batch.update(profileRef, { likes })
batch.commit() // at this point everything works or not
.then(() => {
console.log('success!')
})
.catch(err => {
console.log('something went wrong')
})
To update multiple documents in a transaction, you call t.update()
multiple times.
let promise = await admin.firestore().runTransaction(transaction => {
var post = transaction.get(docRef);
var anotherPost = transaction.get(anotherDocRef);
if (post.exists && anotherPost.exists) {
var newLikes = (post.data().likes || 0) + 1;
await transaction.update(docRef, { likes: newLikes });
newLikes = (anotherPost.data().likes || 0) + 1;
await transaction.update(anotherdocRef, { likes: newLikes });
}
})
See https://firebase.google.com/docs/firestore/manage-data/transactions#transactions