Javascript 通过函数查询firebase实时数据库
我使用firebase函数和Admin SDK在事件触发器上实现函数。当有新的更新可用时,我正在尝试向用户推送通知。因此,当更新版本从当前版本更改时,我想对用户对象进行一些更改,并将update_available key设置为Javascript 通过函数查询firebase实时数据库,javascript,node.js,firebase,firebase-realtime-database,google-cloud-functions,Javascript,Node.js,Firebase,Firebase Realtime Database,Google Cloud Functions,我使用firebase函数和Admin SDK在事件触发器上实现函数。当有新的更新可用时,我正在尝试向用户推送通知。因此,当更新版本从当前版本更改时,我想对用户对象进行一些更改,并将update_available key设置为true 现在,正在跟踪的事件(更新版本)的位置和要更改的数据都位于完全不同的对象中。对象模型如下所示: |root |- app_info |- version |- users |- <uid>
true
现在,正在跟踪的事件(更新版本)的位置和要更改的数据都位于完全不同的对象中。对象模型如下所示:
|root
|- app_info
|- version
|- users
|- <uid>
|- checker
|- update_available: true
我想这可能是完全错误的。此刻我觉得自己被卡住了。非常感谢您的帮助。我主要关心的是如何绕过uid
或通过它进行查询 以下各项应有效(但未经测试)
请注意使用Promise.all()
,因为您需要并行更新数量可变的用户
节点
exports.versionUpdate = functions.database.ref('/app_info').onUpdate((change, context) => {
const beforeData = change.before.val(); // data before the update
const afterData = change.after.val(); // data after the update
if (beforeData.version !== afterData.version) {
const promises = [];
const usersRef = admin.database().ref('/users');
return usersRef.once('value', function(snapshot) {
snapshot.forEach(childSnapshot => {
const uid = childSnapshot.key;
promises.push(usersRef.child(uid + '/checker/update_available').set(true));
});
return Promise.all(promises);
});
} else {
return null;
}
});
如何链接应用程序信息和用户?不,不链接它们。我正在观察这个版本的价值。一旦它发生变化,我希望checker下可用的update_的所有值对所有用户都为true。默认情况下,该值将非常大。老实说,我脑子里有完全相同的逻辑,但foreach循环以前对我不起作用。这完全有效。我发布了这个问题,因为我认为可能有一种方法可以像在iOS SDK中一样查询数据。但这就行了。谢谢雷诺。这怎么能用打字机写呢?
exports.versionUpdate = functions.database.ref('/app_info').onUpdate((change, context) => {
const beforeData = change.before.val(); // data before the update
const afterData = change.after.val(); // data after the update
if (beforeData.version !== afterData.version) {
const promises = [];
const usersRef = admin.database().ref('/users');
return usersRef.once('value', function(snapshot) {
snapshot.forEach(childSnapshot => {
const uid = childSnapshot.key;
promises.push(usersRef.child(uid + '/checker/update_available').set(true));
});
return Promise.all(promises);
});
} else {
return null;
}
});