node.js - 使用 orderByChild() 删除 Firebase 多路径
问题描述
基本上,当用户删除他们的帐户时,我会尝试清理 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() 的地方之外,所有内容都会删除。似乎没有什么(我能找到)与此有关。
我很感激这方面的一些指导!
干杯。
解决方案
要从 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)
})
推荐阅读
- pandas - 无法使用 python 从 AWS S3 中的现有 csv 文件中删除行
- flutter - 在颤动中从树中销毁有状态的小部件
- java - JAVA Spring boot:DELETE方法不存在必需的字符串参数“xxx”
- elasticsearch - 动态文本内容
- docker - 在 docker swarm 中创建服务时如何设置 docker image 时区?
- python - 如何使用 Pyspark 在所有文件中使用 Spark 变量?
- python - IMAPLIB - 超时错误
- c - 在其他函数中无法通过strlen 获取字符串的长度?
- python - 验证缩写 Pandas Python
- android - 如何使用导航组件从 Activity 到 Fragment 获取结果?