获取满足查询条件的文档ID

时间:2018-01-02 11:46:46

标签: node.js google-cloud-functions google-cloud-firestore

我想获得满足云端防火墙中给定查询的文档ID。 我的数据库的架构是这样的 deyaPayusers / AUTHID                     /用户详细信息                     电话号码:                     /钱包                     /交易 我知道PhoneNo,那么有没有办法获得相应的AuthId。 我实现了我的想法,如下所述,我遇到了这个错误

  

参数“documentPath”不是有效的ResourcePath。路径必须是   非空字符串。

const functions = require('firebase-functions');
const Firestore = require('@google-cloud/firestore');
const firestore = new Firestore();
const admin = require('firebase-admin');
    exports.transactionDetails = functions.firestore
        .document('deyaPayusers/{authid}/Transaction/{authid1}')
            .onWrite(event=>{
            const db1 = admin.firestore();
            const MAuth = event.params.authid
            const transid = event.params.authid1
            var payeeDocId
            var newValue = event.data.data();
            var payee = newValue.Payee;//Phone number of money receiver
            var amt = newValue.Amount;//Amount willing to pay to payee(money receiver)
            var usersRef = db1.collection('deyaPayusers').doc(MAuth);//Refers to payer doc
            var payer = usersRef.PhoneNo;//Gets Phonenumber attribute of payer
            const walletRefPayer = db1.collection('deyaPayusers').doc(MAuth).collection('Wallet').doc(MAuth);//Wallet reference of Payer
            var walletAmt = walletRefPayer.Usd//Accessing the total amount of a person(payer) stored in the wallet
            //Getting the payee details assuming, payee has an account in DeyaPay else we need to send the invite to the payee
            var payeeInfo = db1.collection('deyaPayusers');//Query to retrieve the payee details from his phone number
            let payeeQuery = payeeInfo.where('PhoneNo','==',payee)//We are retrieving it here,before checking the condition because we need to update the transaction details with status either it is failure or success
                .get()//To get the doc ID of the Payee based upon  the PhoneNo
                .then(snapshot => {
                    snapshot.forEach(doc=>{
                      payeeDocId = doc.id;


                       }
                        });
                 /*.catch(err =>{
                        console.log('Error getting documents',err);
                        });*/
            //const docID = payeeQuery.getId();//Gets the Document ID of the payee with the above phone number,in our case it is Authenticated ID.
            var payeeWalletRef = db1.collection('deyaPayusers').doc(payeeDocId).collection('Wallet').doc(payeeDocId);
            if(walletAmt>=amt){
                //Write transactions here,becuase both actions(increment and decrement) must complete together
            var payeeTransaction = db1.runTransactions(pT=>{
                    return pT.get(payeeWalletRef)
                        .then(doc =>{
                            var payeeDoc = doc.data(Usd)+amt;//Crediting the amount to be added
                            return pT.update(payeeWalletRef,{
                            Usd:payeeDoc});//end of update
                            })
                })//end of payeeTransaction
            var payerTransaction = db1.runTransactions(ev=>{
                return ev.get(walletRefPayer)
                    .then(doc=>{
                    var payerDoc  = doc.data(Usd)-amt;//Debitting the amount to be transfered
                    return ev.update(walletRefPayer,{
                    Usd:payerDoc});//end of update
                    });//end of then for payerTransaction
                    })//end of payerTransaction
            }
            });//onWrite() end

1 个答案:

答案 0 :(得分:3)

.document('deyaPayusers/{authid}/Transaction/{authid1}')

您没有正确插入此字符串。

你需要

.document(`deyaPayusers/{authid}/Transaction/{authid1}`)

另外,如果你是从谷歌来这里的话。 .document的任何非字符串参数也会导致此异常。