Firebase Firestore事务更新多个文档
我想更新一个集合中的文档Firebase Firestore事务更新多个文档,firebase,transactions,google-cloud-firestore,Firebase,Transactions,Google Cloud Firestore,我想更新一个集合中的文档 my_collection document_1 field_1 field_2 document_2 field_1 field_2 我的代码: exports.aggregateUsers = functions.firestore.document('users/{userId}').onWrite(function(change, context) { const docu
my_collection
document_1
field_1
field_2
document_2
field_1
field_2
我的代码:
exports.aggregateUsers =
functions.firestore.document('users/{userId}').onWrite(function(change,
context) {
const document = change.after.exists ? change.after.data() : null;
const oldDocument = change.before.data() || null;
return firestore.runTransaction(function(transaction) {
var oldInstanceRef;
var instanceRef;
var oldInstanceDoc;
var instanceDoc;
if (document != null) {
instanceRef = firestore.collection("counters").doc("instance_counter").collection("instances").doc(document.instance);
instanceDoc = transaction.get(instanceRef);
var newNumberOfUsers = (instanceDoc.data().number_of_users || 0) + 1;
transaction.set(instanceRef, { number_of_users: newNumberOfUsers });
}
if (oldDocument != null) {
oldInstanceRef = firestore.collection("counters").doc("instance_counter").collection("instances").doc(oldDocument.instance);
oldInstanceDoc = transaction.get(oldInstanceRef);
var newPrevNumberOfUsers = (oldInstanceDoc.data().number_of_users || 0) + 1;
transaction.set(instanceRef, { number_of_users: newPrevNumberOfUsers });
}
}).catch(function(error) {
console.log("invalid-argument", error.code, error.message);
});
});
错误:
instanceDoc.data is not a function
我正在使用云中的Transaction功能来聚合用户数量,而不是使用分布式计数器,因为应用程序的流量很低。我的问题是如何更新每个文档中字段的值?谢谢我想你忘了异步/等待 试试这个:
async
beforetransaction
参数transaction.get()之前等待
返回firestore.runTransaction(异步事务=>{
var-oldInstanceRef;
var瞬时值;
var oldInstanceDoc;
var instanceDoc;
如果(文档!=null){
instanceRef=firestore.collection(“counters”).doc(“instance_counter”).collection(“instances”).doc(document.instance);
instanceDoc=等待事务.get(instanceRef);
var newNumberOfUsers=(instanceDoc.data().number of|u users | 0)+1;
set(instanceRef,{numberofusers:newNumberOfUsers});
}
如果(旧文档!=null){
oldInstanceRef=firestore.collection(“counters”).doc(“instance_counter”).collection(“instances”).doc(oldDocument.instance);
oldInstanceDoc=等待事务.get(oldInstanceRef);
var newPrevNumberOfUsers=(oldInstanceDoc.data().number of|u users | 0)+1;
set(instanceRef,{numberofusers:newPrevNumberOfUsers});
}
}).catch(函数(错误){
log(“无效参数”、error.code、error.message);
});代码>您是否阅读了有关事务的文档?请使用您尝试过的代码编辑问题,该代码无法按您期望的方式工作。是的,我有,我的参考链接:从您的代码中不清楚instanceDoc是如何定义的。原点隐藏在change.after
后面,我们在这里看不到。看起来您可能正在使用云功能,这是一个非常重要的细节。如果看不到整个最小函数以及调用它的确切方式,就不可能看到您预期会发生什么。编辑了我的整个函数,您要做什么来调用您的函数?请编辑问题,并非常具体地说明您正在做什么,以及您期望在回答时发生什么。