从函数内部的数据库中检索数据

时间:2018-01-19 01:29:24

标签: javascript firebase firebase-realtime-database google-cloud-functions

我需要在Firebase功能中调用Firebase数据库。 以下是我的数据库结构的外观: enter image description here

我需要通过FirstName获取LastName。我尝试了很多方法,对我来说没有任何作用。 这是其中之一:

    var db = admin.database();
    var ref = db.ref("people");
     ref.equalTo("Alex").on("child_added", function(snapshot) {
            console.log(snapshot.key);
     });

我做错了什么?

1 个答案:

答案 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环境,以便它知道您的代码已完成。