如何使用Google Cloud功能查询Firebase Realtime数据库

时间:2019-06-17 17:27:04

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

几天来我一直在努力解决这个问题…… 任何帮助将不胜感激。

我正在尝试构建从发布/订阅主题(“ ETACheck”)触发的Firebase Cloud Function。触发部分工作正常。 调用云功能时,它将扫描Firebase数据库以查找“ ECT”键等于“”的所有记录。 数据的组织方式如下:

enter image description here

这是代码段:

exports.CheckETAResponse = functions.pubsub.topic('ETACheck').onPublish((message, context) => {
   console.log('The function was triggered at ', context.timestamp);
   console.log('The unique ID for the event is', context.eventId);
   var db = admin.database();
    var ref = db.ref('{company}/Requisitions/{store}');
    return ref.orderByChild('ECT').equalTo('').on('value')
        .then((snapshot) => {
        if (snapshot !== null) {
            const data = snapshot.val();
            console.log('Data',data);
        }
        else {
            console.log('Snapshot is null');
        }
        return null;
    })
    .catch((error) => console.log('Error',error))

});

还有Firebase的错误(数据= null):

enter image description here

我将查询更改为“ .on('child_added'),但出现以下错误:

enter image description here

1 个答案:

答案 0 :(得分:0)

db.ref('{company}/Requisitions/{store}')中的这些类型的通配符仅在Cloud Functions声明中可用,而在数据库的其他路径中则不可行。 Firebase查询在子节点平面列表的模型上工作。无法找到Requisitions下具有ECT == ""的所有嵌套子节点。您可以Requisitions/001下搜索,但不能在所有Requisitions/*下搜索。

考虑添加允许这种类型查找的倒排索引:

EmptyECTs: {
  "Requestion/001/-Lhv...": true
}

这使您可以轻松读取节点。

有关此的更多信息,请参见: