Firebase向嵌套集合添加文档报错,求正确语法
Firebase 嵌套集合添加文档的正确语法
你这段代码的问题在于,用doc()获取了messages的引用,但addDoc()方法要求传入的是集合引用,而不是单个文档的引用。doc()是用来定位具体某一篇文档的,嵌套集合需要用collection()来构建路径。
修正后的代码如下:
createMessages(docId: string, content: string, receivingUserId: string, sendingUserId: string, displayName: string) { console.log('createmsg', docId, content, receivingUserId, sendingUserId); // 用 collection() 构建嵌套集合的引用 const messagesCollectionRef = collection(getFirestore(getApp()), 'matches', docId, 'messages'); // 传入所有需要存储的字段,避免只保留content return addDoc(messagesCollectionRef, { content, receivingUserId, sendingUserId, displayName, createdAt: serverTimestamp() // 可选:添加服务器时间戳,方便消息排序 }); }
额外提示
- 如果需要给新消息文档指定自定义ID,可以用
setDoc(doc(messagesCollectionRef, '自定义ID'), 数据)替代addDoc - 检查Firestore安全规则,确保允许对
matches/{matchId}/messages集合执行写入操作,否则会触发权限报错 serverTimestamp()需要从firebase/firestore导入,用来生成统一的服务器时间,避免客户端时间不一致的问题
内容的提问来源于stack exchange,提问作者D.Hodges
相关产品推荐
相关产品推荐

