如何通过使用我搜索的单个事务更新firestore中的多个文档,但我没有得到任何答案。是否可以在单个交易中更新多个文档?我知道可以通过批量写入来完成。
答案 0 :(得分:5)
我发现我们可以在事务中使用多个引用:
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: age, details: userAlfredDetails });
transaction.set(userAlfredDetails, { address: 'Alfred Villa' });
transaction.update(userJohn, {
age: age
});
transaction.update(userSuhail, {
age: age
});
transaction.update(userSam, {
age: age
});
return age;
});
}).then(function (age) {
console.log("Age changed to ", age);
}).catch(function (err) {
console.error(err);
});
通过上面的代码,交易会更新所有用户的年龄。
答案 1 :(得分:2)
概念证明:
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)
});
答案 2 :(得分:0)
您可以使用firebase提供的批处理方法。 这就是我用来存储对象数组,在新创建的集合中创建多个文档的方式。
export const addCollectionAndDocuments = async (collectionKey, objectToAdd) => {
console.log(collectionKey, objectToAdd);
let collectionRef = firestore.collection(collectionKey);
const batch = firestore.batch();
objectToAdd.forEach(obj => {
const newDocRef = collectionRef.doc();
batch.set(newDocRef, obj);
});
return await batch.commit();
};
答案 3 :(得分:-5)
您可以使用此=>
firestore.collection("YOUR_COLLECTION_PATH")
.get()
.then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
console.log(doc.id, " => ", doc.data());
});
})
.catch(function(error) {
console.log("Error getting documents: ", error);
});
另外,如果要在数组中映射querySnapshot,可以这样做:
firestore.collection("YOUR_COLLECTION_PATH")
.get()
.then(function(querySnapshot) {
var arrayDocs = querySnapshot.docs.map(docData=>docData.data())
console.log(arrayDocs);
})
.catch(function(error) {
console.log("Error getting documents: ", error);
});
信息位于https://firebase.google.com/docs/firestore/query-data/get-data