You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决向Firebase新创建文档添加子集合时生成新文档的问题?

问题原因与解决方案

核心问题

你的代码报错的核心原因是 Firebase Auth用户ID字段调用错误:
Firebase Auth返回的auth.currentUser对象的唯一标识字段为uid,而非id。你代码中传入的auth.currentUser.id实际取值为undefined,当Firestore的doc()方法接收undefined作为参数时,会自动生成随机ID作为文档ID,这就是你看到生成新随机ID文档的原因。

优化修正

除了修正字段错误,你还可以简化文档引用逻辑:已经获取到新创建chat文档的docRef后,可直接基于该引用创建子集合,无需重复拼接db.collection("chats").doc(docRef.id)路径。同时建议对异步写入操作增加等待与错误捕获逻辑,避免时序问题。

修正后的代码示例:

db.collection('chats').add({
  created: firebase.firestore.FieldValue.serverTimestamp()
})
.then(async (docRef) => {
  console.log("新生成的chat id:" + docRef.id)
  // 直接基于现有docRef构造参与者子集合引用
  const participantsCol = docRef.collection("participants")
  // 并行写入两个参与者信息,用Promise.all统一管理异步任务
  await Promise.all([
    // 把id改为uid
    participantsCol.doc(auth.currentUser.uid).set(currentUser),
    participantsCol.doc(user.id).set(otherUser)
  ])
  // 依赖写入完成的后续操作可写在此处
})
.catch(err => {
  // 增加错误捕获方便排查问题
  console.error("参与者信息写入失败:", err)
})

验证步骤

  • 写入前打印auth.currentUser.uid确认可以拿到正确的用户ID字符串,避免传入空值触发自动生成ID逻辑
  • 写入完成后在Firestore控制台核对对应chat文档下的participants子集合,确认文档ID与预期一致

内容的提问来源于stack exchange,提问作者bobby_belfast

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 10:48:01