我想获取满足云 Firestore 中给定查询的文档 ID。 我的数据库的架构是这样的 deyaPayusers/AuthId /用户详细信息 电话号码: /钱包 /交易 我知道PhoneNo,那有没有办法得到对应的AuthId。 我按照下面的描述实现了我的想法,但遇到了这个错误
Argument "documentPath" is not a valid ResourcePath. Path must be a non-empty string.
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
最佳答案
.document('deyaPayusers/{authid}/Transaction/{authid1}')
您没有正确插入此字符串。
你需要
.document(`deyaPayusers/{authid}/Transaction/{authid1}`)
此外,如果您是从谷歌访问这里的。 .document
的任何非字符串参数也会导致此异常。
关于node.js - 获取满足查询条件的文档 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48060402/