Firebase数据库添加用户名集合:如何设置动态唯一键
解决Firebase动态键存储的问题
嘿,我来帮你搞定这个Firebase数据存储的问题!咱先说说你原代码里的两个小坑:
- 你用了
{ user: 1 },这里的user是对象的字面量键名,不是变量,所以不管循环多少次,键都会是固定的"user"; - 循环里每次调用
set()会直接覆盖games/users节点下的所有数据,最后只会剩下最后一个用户的数据。
针对你想要的两种动态键方案,我分别给你写代码示例:
方案一:用递增数字作为键(比如1: "Max", 2: "Jane")
你可以利用forEach的第二个参数(索引)来生成递增数字,注意要用计算属性名把变量值作为键,同时推荐先构建完整对象再一次性写入,比循环里逐个更新更高效:
// 方法1:先构建完整对象,一次性写入 const usersObj: { [key: number]: string } = {}; this.addedUsers.forEach((user, idx) => { // idx从0开始,+1让键从1开始递增 usersObj[idx + 1] = user; }); firebase.database().ref("games").child("users").set(usersObj);
如果你非要在循环里逐个添加,那就用update()而不是set(),避免覆盖:
let currentIndex = 1; this.addedUsers.forEach((user: string) => { const gameUsersRef = firebase.database().ref("games").child("users"); // 计算属性名[index]会把currentIndex的数值作为键 gameUsersRef.update({ [currentIndex]: user }); currentIndex++; });
方案二:使用数据库中已存储的用户键作为键
假设你的用户数据已经存在Firebase的/users节点(比如结构是userKey: "用户名"),你需要先建立用户名到用户键的映射,再写入games/users:
情况1:已经有用户名到用户键的映射
// 假设你已经从数据库或其他地方拿到了这个映射 const userKeyMap: { [name: string]: string } = { "Max": "user_abc123", "Jane": "user_def456", "Joe": "user_ghi789" }; const gameUsersObj: { [key: string]: string } = {}; this.addedUsers.forEach(user => { const userKey = userKeyMap[user]; if (userKey) { // 确保存在对应的用户键,避免报错 gameUsersObj[userKey] = user; } }); firebase.database().ref("games").child("users").set(gameUsersObj);
情况2:需要先从数据库获取用户键映射
如果还没有映射,先从/users节点读取数据再构建:
firebase.database().ref("users").once("value") .then(snapshot => { const userKeyMap: { [name: string]: string } = {}; snapshot.forEach(childSnap => { const userName = childSnap.val(); userKeyMap[userName] = childSnap.key; // 把用户名和对应的用户键存起来 }); // 构建要写入的对象 const gameUsersObj: { [key: string]: string } = {}; this.addedUsers.forEach(user => { const userKey = userKeyMap[user]; if (userKey) { gameUsersObj[userKey] = user; } }); // 写入到games/users节点 return firebase.database().ref("games").child("users").set(gameUsersObj); }) .catch(error => { console.error("获取用户键失败:", error); });
这样就能实现你想要的动态键存储啦!
内容的提问来源于stack exchange,提问作者parvaneh
相关产品推荐
相关产品推荐

