繁体   English   中英

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

[英]How to query Firebase Realtime database using Google Cloud functions

我一直试图解决这个问题好几天...非常感谢任何帮助。

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

在此输入图像描述

这是代码片段:

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的错误(data = null):

在此输入图像描述

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

在此输入图像描述

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

考虑添加允许此类查找的反向索引:

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

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

有关详细信息,请参阅:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM