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
    before
    transaction
    参数
  • 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
    后面,我们在这里看不到。看起来您可能正在使用云功能,这是一个非常重要的细节。如果看不到整个最小函数以及调用它的确切方式,就不可能看到您预期会发生什么。编辑了我的整个函数,您要做什么来调用您的函数?请编辑问题,并非常具体地说明您正在做什么,以及您期望在回答时发生什么。