我需要在Firebase功能中调用Firebase数据库。 以下是我的数据库结构的外观:
我需要通过FirstName获取LastName。我尝试了很多方法,对我来说没有任何作用。 这是其中之一:
var db = admin.database();
var ref = db.ref("people");
ref.equalTo("Alex").on("child_added", function(snapshot) {
console.log(snapshot.key);
});
我做错了什么?
答案 0 :(得分:2)
您没有告诉Firebase订购/过滤哪个字段。那么什么属性你想要等同于Alex?
要告诉数据库,请在orderByChild(...)
之前致电equalTo(...)
:
var db = admin.database();
var ref = db.ref("people");
ref.orderByChild("FirstName").equalTo("Alex").on("child_added", function(snapshot) {
console.log(snapshot.key);
});
这将在网络客户端中运行,该网页客户端将在页面打开时保持与Firebase数据库的开放连接。但在云端功能中,您的代码会很快关闭,因此您通常希望使用once("value",...)
进行阅读:
ref.orderByChild("FirstName").equalTo("Alex").once("value", function(snapshot) {
snapshot.forEach(function(child) {
console.log(child.key);
});
});
如果您在云功能中运行此代码,则需要在完成后告知云功能。为此,您将从代码中返回所谓的承诺。这里有一个简单的方法:
return ref.orderByChild("FirstName").equalTo("Alex").once("value", function(snapshot) {
snapshot.forEach(function(child) {
console.log(child.key);
});
return Promise.resolve();
});
因此,在回调中,我们会在完成后返回已解决的承诺。然后我们的外部代码将其返回给Cloud Functions环境,以便它知道您的代码已完成。