使用orderByChild()

时间:2019-07-23 00:05:40

标签: node.js firebase firebase-realtime-database firebase-admin

基本上,当用户删除其帐户时,我正在尝试清除RTDB中的所有数据。

这是没有问题的,直到必须处理几个需要使用orderByChild访问它们的节点为止。这可以在原子/多路径更新中完成吗?

我已经尝试过像这样内联:

      exports.removeUserFromDatabase = functions.auth.user()
          .onDelete(function(user, context) {
              // Get the uid of the deleted user.
              var uid = user.uid;

              const deleteUserData = {};
              deleteUserData[`users/${uid}`] = null;
              deleteUserData[`feed/${uid}`] = null;
              deleteUserData[`friends/${uid}`] = null;

                //THIS IS WHERE I NEED TO USE ORDERBYCHILD() TO ACCESS NODE
                deleteUserData[admin.database().ref('/friends').orderByChild(uid)] = null;

              deleteUserData[`profileThumbs/${uid}`] = null;
              deleteUserData[`hasUnreadMsg/${uid}`] = null;
              deleteUserData[`userChatRooms/${uid}`] = null;
              deleteUserData[`userLikedPosts/${uid}`] = null;
              deleteUserData[`userLikedStrains/${uid}`] = null;
              deleteUserData[`userLikedStrains/${uid}`] = null;

              admin.database().ref().update(deleteUserData)
      });

所有内容都会删除,但我尝试使用orderByChild()的地方除外。 (我找不到)关于此的东西。

我希望能对此提供一些指导!

干杯。

1 个答案:

答案 0 :(得分:0)

要从Firebase实时数据库中删除节点,您需要知道其完整的确切路径。不支持删除查询的概念,在该概念中,您将条件传递给数据库的删除操作。

如果要删除/friends的所有在某个属性中具有某个值的子节点,则首先需要执行查询,然后删除所有结果子节点:

admin.database().ref('/friends').orderByChild("uid").equalTo(uid)
     .once("value").then((friendsSnapshot) => {
         friendsSnapshot.forEach((friendSnapshot) => {
             deleteUserData[`/friends/${friendSnapshot.key}`] = null;
         });
         admin.database().ref().update(deleteUserData)
     })