删除用户帐户触发另一节点的删除



db结构:

--followers
  -followedUser1
   -user1
  -followedUser2
   -user1
   -user2
--users
  -user1
   -followed
    -followedUser1
    -followedUser2
  -user2(followedUser1)
   -followed
    -followedUser2
  -user3(followedUser2)

每次用户都关注(ongreate)&在关注者/{Chanduser}/{followerUser}路径下取消关注(OnDelete),IT触发功能,该功能会增加或取消计数,并分配或分配或从关注者中分配或脱离帖子。它是通过粉丝方法来工作的,没有问题。现在,更糟糕的是,当某些用户完全删除帐户与他自己的追随者分离时(因为他的帐户将是一个幽灵),我将触发器设置为trigger onDelete,以指示何时发生,然后通过此用户迭代(i.user3))关注者将自己从相应的关注者中脱离了他的帐户,看起来这样:

--followers
  -followedUser1
   -user1
  -followedUser2
   -user1
   -user2
--users
  -user1
   -followed
    -followedUser1
  -user2(followedUser1)

现在,有问题的部分 - 当承诺返回时,我也想删除整个追随者/constuser2(因为现在是一个幽灵)路径,但是...不幸的是,有一个触发器为每个关注者执行(OnDelete)。因此,是否有机会在不触发儿童本身的情况下删除上方的路径(升级)删除触发器?或任何其他方法都很棒,谢谢

编辑:不要误会我的意思,它将起作用,但是如果关注者下的关注者数量将是"很多"服务器,则在100次之后死亡...触发

目前,无法过滤哪些删除事件会触发该功能,因此您是正确的,每个用户删除用户都关注的每个用户将触发一次函数。我知道这是许多用例中有用的用例之一,因此,如果有机会,请在此处填写功能请求。

看来,您的多个更新问题可以通过多点更新解决

在非常快速的黑客攻击中,未测试的打字稿:

export const cleanupFollowers = functions.auth.user().onDelete(event => {
  const user = event.data.userId;
  const followersNode = admin.database().ref(`followers/${user}`);
  const followers = _.keys(await followersNode.once('value'));
  // Every follower also has a reverse node for this user. Get the list of keys:
  const reverseNodesToDelete = followers.map(follower => `followers/${follower}/${user}`);
  // Model this update as a map of deep key -> null to delete all at once
  let cleanup = _.keyBy(reverseNodesToDelete, null);
  // add one more update: deleting full node for the deleted user.
  cleanup[`followers/${user}`] = null;
  // do all deletions as one database request:
  return admin.database().ref().update(cleanup);
 }

请注意,这仍然会触发您的计数功能,但这应该可以并行运行。它可能使您的应用程序分别捕获每个不变。

相关内容

  • 没有找到相关文章

最新更新