如何在Firestore中增加字段?

时间:2018-07-14 06:31:49

标签: javascript firebase google-cloud-firestore

我正在尝试建立一个用于付款目的的计数器。现在,我正在贝宝(Paypal)的取消状态(而不是实际购买)上对其进行测试,因为目前我没有凭据。完成后,我会将大部分代码转移到实际的付款成功功能上。

是否可以通过增加现有的int字段来更新Firebase文档的int字段?

我这里的代码进入了无限循环,因为它跟踪自己的数据。

    paymentCancelled: function(data) {
        console.log("payment cancelled")
        let db = firebase.firestore()
        db.collection("users").where("userId", "==", firebase.auth().currentUser.uid)
            .onSnapshot(function(querySnapshot) {
                querySnapshot.forEach(function(doc) {
                    console.log("before: " + doc.data().credits)

                    //this is where I'm having trouble
                    const creditIncrement = doc.data().credits + 100
                    var creditRef =
                        db.collection("users").doc(firebase.auth().currentUser.uid);
                    return creditRef.update({
                            credits: creditIncrement
                        })
                        .then(function() {
                            console.log("Document successfully updated!");
                            return;
                        })
                        .catch(function(error) {
                            // The document probably doesn't exist.
                            console.error("Error updating document: ", error);
                        });
                })
            })
        console.log(data) //logging out contents from PayPal, unnecessary atm
    }

1 个答案:

答案 0 :(得分:0)

您应该使用.get()而不是. onSnapshot()

db.collection("users").where("userId", "==", firebase.auth().currentUser.uid)
   .get().then(function(querySnapshot) {
       querySnapshot.forEach(function(doc) {
           console.log("before: " + doc.data().credits)

           //this is where I'm having trouble
           const creditIncrement = doc.data().credits + 100
           var creditRef =
               db.collection("users").doc(firebase.auth().currentUser.uid);
           return creditRef.update({
                   credits: creditIncrement
               })
               .then(function() {
                   console.log("Document successfully updated!");
                   return;
               })
               .catch(function(error) {
                   // The document probably doesn't exist.
                   console.error("Error updating document: ", error);
               });
       })
   })

.get()仅获取一次数据,而不是通过onSnapshot监听数据更改

出于数据一致性的考虑,您可能需要考虑使用firestore transaction