我正在尝试围绕关注者和关注者构建Firebase应用程序的触发器。以下是我的云代码片段。我想在用户关注时增加计数器。为此,我使用oncreate(用于由于结构到此为止用户尚不存在的情况下用户获得其第一个关注者),然后使用onupdate。然后,当用户取消关注并被删除时,我使用ondelete减少以下计数。

我遇到的问题是,不调用.ondelete,而仅调用.onupdate,而与添加或删除用户无关(回想起来很合理)。我的问题是如何编写云功能以将删除项与添加项分开。

数据库看起来像这样

user1
  - following
     -user2
       -small amount of user2data
     -user3
       -small amount of user3data


和代码:

    exports.countFollowersUpdate = functions.database.ref('/{pushId}/followers/')
        .onUpdate(event => {

          console.log("countFollowers")


          event.data.ref.parent.child('followers_count').transaction(function (current_value) {

            return (current_value || 0) + 1;
          });


        });

exports.countFollowersCreate = functions.database.ref('/{pushId}/followers/')
    .onCreate(event => {

      console.log("countFollowers")


      event.data.ref.parent.child('followers_count').transaction(function (current_value) {

        return (current_value || 0) + 1;
      });


    });


exports.countFollowersDelete = functions.database.ref('/{pushId}/followers/')
    .onDelete(event => {

      console.log("countFollowers2")


      event.data.ref.parent.child('followers_count').transaction(function (current_value) {

        if ((current_value - 1) > 0) {
          return (current_value - 1);
        }
        else{
          return 0;
        }
      });

最佳答案

之所以不会调用onDelete是因为您正在侦听整个followers节点,因此只有在关注者计​​数变为零(一无所有)时才会调用它。相反,您可能希望所有这些都更像是:

functions.database.ref('/{pushId}/followers/{followerId}').onDelete()


您具有顶级推送ID也很不寻常。结构通常更像/users/{pushId}/followers/{followerId}

10-07 15:53