Firebase-使用通配符和equalto()检索数据
我正在使用firebase数据库上的firebase函数尝试提取数据,但没有成功 我要搜索的数据的结构如下: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
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异步加载数据,因此您必须在它可用的范围内使用它。看见