Firebase实时数据库(RTDB)中获取节点key的最高效方法是什么
关于Firebase实时数据库(RTDB)节点key获取的解决方案
1. 新建Push节点时获取key的正确方法
Firebase的push()方法在客户端执行时会同步生成唯一节点ID,不需要等待异步返回,也不需要在then()里获取key,原有代码错误点在于将同步的getKey()方法当成异步方法调用,且没有声明key变量。
正确代码示例:
// 先创建引用 const postRef = firebase.database().ref("Posts").push(); // 直接同步获取生成的key const newPostKey = postRef.key; // 再执行写入操作 postRef.set({ Title: textToSaveTitle, Post: textToSave, uid: user.uid, profilePic: downloadURL, firstLast: fln, username: username, likes:0, flair: document.getElementById("dropdownMenuButton").innerHTML, time: time + " " + cMonth + "/" + cDay + "/" + cYear }).then(() => { // 这里就可以直接用前面拿到的newPostKey了 console.log("新建帖子的key是:", newPostKey); // 要更新的话直接用这个key拼路径即可 // firebase.database().ref(`Posts/${newPostKey}`).update({...}) })
2. 批量获取已存在的Posts节点下所有子节点key
原有代码用Object.keys(lists)是错误的,因为lists是Firebase的DataSnapshot实例,不是普通JS对象,要获取子节点的key直接取每个遍历快照的key属性即可:
firebase.database().ref("Posts").on("value", (listsSnapshot) => { const allPostKeys = []; listsSnapshot.forEach((singlePostSnapshot) => { // 直接拿每个子节点的key const postKey = singlePostSnapshot.key; allPostKeys.push(postKey); // 对应的数据可通过 singlePostSnapshot.val() 获取 }) console.log("所有帖子的key列表:", allPostKeys); })
补充:用key更新节点的示例
拿到任意节点key后,更新操作写法如下:
// 替换成你拿到的目标节点key,即可更新对应节点内容 const targetPostRef = firebase.database().ref(`Posts/${目标节点key}`); targetPostRef.update({ likes: 10 }).then(() => { console.log("更新成功"); })
内容的提问来源于stack exchange,提问作者FahadA
相关产品推荐
相关产品推荐

