几天来我一直在努力解决这个问题…… 任何帮助将不胜感激。
我正在尝试构建从发布/订阅主题(“ ETACheck”)触发的Firebase Cloud Function。触发部分工作正常。 调用云功能时,它将扫描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的错误(数据= null):
我将查询更改为“ .on('child_added'),但出现以下错误:
答案 0 :(得分:0)
db.ref('{company}/Requisitions/{store}')
中的这些类型的通配符仅在Cloud Functions声明中可用,而在数据库的其他路径中则不可行。 Firebase查询在子节点平面列表的模型上工作。无法找到Requisitions
下具有ECT == ""
的所有嵌套子节点。您可以在Requisitions/001
下搜索,但不能在所有Requisitions/*
下搜索。
考虑添加允许这种类型查找的倒排索引:
EmptyECTs: {
"Requestion/001/-Lhv...": true
}
这使您可以轻松读取节点。
有关此的更多信息,请参见: