Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase-使用通配符和equalto()检索数据_Firebase_Firebase Realtime Database_Google Cloud Functions - Fatal编程技术网

Firebase-使用通配符和equalto()检索数据

Firebase-使用通配符和equalto()检索数据,firebase,firebase-realtime-database,google-cloud-functions,Firebase,Firebase Realtime Database,Google Cloud Functions,我正在使用firebase数据库上的firebase函数尝试提取数据,但没有成功 我要搜索的数据的结构如下: let time = ...; let uId = ...; admin.database().ref(`status/worker/${time}/${uId}/pushToken`) 我想做的逻辑如下:当一条记录写入“jobs”集合时,我想在“status”集合中搜索存储为true/false的availableStatus 对于为true的记录,我需要获取存储在同一“status

我正在使用firebase数据库上的firebase函数尝试提取数据,但没有成功

我要搜索的数据的结构如下:

let time = ...;
let uId = ...;
admin.database().ref(`status/worker/${time}/${uId}/pushToken`)
我想做的逻辑如下:当一条记录写入“jobs”集合时,我想在“status”集合中搜索存储为true/false的availableStatus

对于为true的记录,我需要获取存储在同一“status”集合中的推送ID“\uuuu zone\u symbol\uuuu value”

在我要查找的数据路径中,有两项我不知道,需要使用通配符{time}和{uId}

以下是我正在使用的代码:

exports.notifyPeople = functions.database.ref('/jobs/{uId}/status')
    .onWrite(event => {
      var dbRead = admin.database().ref('status/worker/{time}/{uId}/pushToken').orderByChild('availableStatus').equalTo('true').on("child_added", function(snapshot) {
          console.log(snapshot.val());
        });

          const getPushTokens = dbRead.child;
      }
我做错了什么?

虽然可以在云函数中使用functions.database.ref'/jobs/{uId}/status'来确定函数将触发的路径,但从数据库读取时不能将其用作通配符:admin.database.ref'status/worker/{time}/{uId}/pushToken'

您必须知道要读取的时间和uId,并像这样使用它们:

let time = ...;
let uId = ...;
admin.database().ref(`status/worker/${time}/${uId}/pushToken`)
或者,您必须阅读来自所有员工的所有信息:

admin.database().ref("status/worker");

如果这意味着你正在读取太多的数据,考虑将额外的数据添加到JSON中,以使这种查找更有效。例如,如果将availableStatus设置为true的节点的令牌列表保留为true,则查找可能非常简单。关于这方面的另一个例子,请参见我的回答:

这正是我所需要的。几个后续问题。我现在使用的代码是:var dbRead=admin.database.ref'status/driver/';如何获取snapshot.val的结果以便使用它们?我似乎无法在该功能之外访问它。第二,一旦我可以读取并使用该变量,我应该如何使用路径中的变量来读取它?第一个问题听起来很像传统的async 101问题:Firebase异步加载数据,因此您必须在它可用的范围内使用它。看见