Android Kotlin:点击提交按钮为Firebase Firestore生成不同文档ID添加数据
解决Firebase Firestore提交表单时数据覆盖问题
你遇到的问题根源是当前代码要么指定了固定的文档ID,要么使用set()方法直接覆盖了已有文档。要实现每次提交生成带随机ID的新文档,Firestore提供了两种直接可行的方案:
方案1:使用collection.add()方法(推荐)
这个方法会自动为新文档生成唯一随机ID,无需手动处理,是最简洁的实现方式:
// 收集表单数据 const formData = { name: document.getElementById('username').value, email: document.getElementById('useremail').value, message: document.getElementById('usermessage').value // 按需添加其他表单字段 }; // 初始化Firestore集合引用 const db = firebase.firestore(); const submissionsCollection = db.collection('form_submissions'); // 提交数据并生成随机ID文档 submissionsCollection.add(formData) .then(docRef => { console.log('提交成功,文档ID:', docRef.id); // 这里可以添加提交成功后的UI提示逻辑 }) .catch(error => { console.error('提交失败:', error); });
方案2:手动生成随机ID后用set()写入
如果需要提前获取文档ID(比如用于后续关联操作),可以先创建带随机ID的文档引用,再调用set()写入数据:
const submissionsCollection = db.collection('form_submissions'); // 生成带随机ID的文档引用 const newDocRef = submissionsCollection.doc(); newDocRef.set(formData) .then(() => { console.log('提交成功,文档ID:', newDocRef.id); }) .catch(error => { console.error('提交失败:', error); });
两种方案效果完全一致,add()本质上是doc()+set()的语法糖。使用任意一种,每次点击提交按钮都会在目标集合下创建全新的唯一文档,不会覆盖之前的提交数据。
内容的提问来源于stack exchange,提问作者Santript Mehta
相关产品推荐
相关产品推荐

