求助:如何获取实时数据库自动生成密钥以更新用户实时数据?
如何获取Firebase实时数据库自动生成密钥并更新用户数据
1. 创建数据时直接获取自动密钥
当使用push()方法添加数据时,该方法会返回包含自动生成密钥的引用,你可以提前提取这个密钥,后续用于更新操作:
// JavaScript环境示例 const dbRef = firebase.database().ref('users'); // 生成带自动密钥的新节点引用 const newUserRef = dbRef.push(); // 获取自动生成的唯一密钥 const autoKey = newUserRef.key; // 写入初始数据 newUserRef.set({ name: "用户名称", email: "user@example.com" }); // 后续更新数据时直接使用该密钥 dbRef.child(autoKey).update({ email: "updated@example.com" });
2. 通过查询已有数据获取密钥
如果数据已存在,可通过用户的唯一标识(如认证UID)查询对应的自动密钥:
// 获取当前登录用户的UID const currentUserId = firebase.auth().currentUser.uid; // 按用户UID查询对应的节点 firebase.database().ref('users') .orderByChild('uid') // 假设你的用户节点中存储了uid字段 .equalTo(currentUserId) .once('value') .then(snapshot => { if (snapshot.exists()) { // 遍历结果提取自动密钥 snapshot.forEach(childSnapshot => { const targetKey = childSnapshot.key; // 执行更新操作 firebase.database().ref(`users/${targetKey}`).update({ lastActive: Date.now() }); }); } });
3. 更高效的方案:绑定用户UID与节点键
为避免后续查询的繁琐,建议直接使用用户认证的UID作为数据库节点键,无需额外获取自动密钥就能快速访问用户数据:
const userId = firebase.auth().currentUser.uid; // 用UID作为节点键写入数据 firebase.database().ref(`users/${userId}`).set({ name: "用户名称", email: "user@example.com" }); // 更新时直接通过UID定位节点 firebase.database().ref(`users/${userId}`).update({ email: "new_email@example.com" });
内容的提问来源于stack exchange,提问作者Ijaz Ahmed
相关产品推荐
相关产品推荐

