所需的详细信息
我正在将Dialogflow实现与Firebase实时数据库一起用于我的项目。我的数据库具有以下结构:
首先让我告诉您有关数据库的结构。它有一个ATM(自动柜员机)清单,上面有完整的地址和其他必要的信息。我需要获取具有给定值Pin
的所有ATM,给定值Pin
的ATM将来自API响应。此Pin号码不过是该ATM的邮政编码。因此很明显,使用Pin
号,可以有很多ATM。
我的问题
下面是我用来进行API调用和Firebase数据库查询的代码,其中接收到的Pin值是API的响应。
var ref = db.ref("atms/");
var response = await axios.get('some URL'); //API call
var zipcodes = response.data.search_results; // Array of Pin values
console.log(zipcodes[2].postal_code); //This prints a Pin value 721304, which confirms successful response from API
ref.orderByChild("Pin").equalTo(zipcodes[2].postal_code).on("child_added", function(snapshot) { //this line is the problem
console.log(snapshot.val());
});
但是上面带有equalTo(zipcodes[2].postal_code)
的代码未给出任何响应。但是,当我将其替换为equalTo(721304)
时,它确实给出了预期的响应。为了强调,equalTo(zipcodes[2].postal_code)
和equalTo(721304)
必须相同。
我仅需要使用此equalTo(zipcodes[2].postal_code)
是因为我将对该查询运行一个循环,这是因为需要一次查询很多Pin
。
能否请您帮助我了解此处的问题以及如何实施此处要执行的操作?如有任何后续问题,请告诉我。
答案 0 :(得分:1)
如console.log(typeof zipcodes[2].postal_code);
所示(请参见上面的注释),zipcodes[2].postal_code
的值不是数字类型,而是字符串类型。您需要将其转换为数字,如下所示:
ref.orderByChild("Pin").equalTo(Number(zipcodes[2].postal_code)).on("child_added", function(snapshot) { //this line is the problem
console.log(snapshot.val());
});