我正在使用firebase数据库上的firebase函数来尝试提取数据,但我没有成功。
我要搜索的数据结构如下:
我想要做的事情的逻辑如下:当记录写入'jobs'集合时,我想在'status'集合中搜索availableStatus(存储为true / false)。
对于真实的记录,我需要获取存储在同一“status”集合中的推送ID('__zone_symbol__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;
}
我做错了什么?
答案 0 :(得分:1)
虽然可以在云函数中使用functions.database.ref('/jobs/{uId}/status')
来确定函数将触发的路径,但在此处从数据库中读取时,它不能用作通配符:admin.database().ref('status/worker/{time}/{uId}/pushToken')
。
您必须知道要阅读的time
和uId
并使用它们:
let time = ...;
let uId = ...;
admin.database().ref(`status/worker/${time}/${uId}/pushToken`)
或者你必须阅读所有工人的所有信息:
admin.database().ref("status/worker");
如果这意味着您正在阅读太多数据,请考虑向JSON添加其他数据,以使此查找更有效。例如,如果为availableStatus
设置为true
的节点保留令牌列表,则查找可以非常简单。有关其他示例,请参阅我的答案:Firebase Query Double Nested