基本上,当用户删除其帐户时,我正在尝试清除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()的地方除外。 (我找不到)关于此的东西。
我希望能对此提供一些指导!
干杯。
答案 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)
})