Javascript 通过函数查询firebase实时数据库

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>

我使用firebase函数和Admin SDK在事件触发器上实现函数。当有新的更新可用时,我正在尝试向用户推送通知。因此,当更新版本从当前版本更改时,我想对用户对象进行一些更改,并将update_available key设置为
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;
   }

});