如何使用addDoc在Firestore中将category字段存储为reference类型?
解决Firestore中category字段存为Map而非Reference的问题
要把transactions集合的category字段存为Reference类型,核心是直接传入Firestore的文档引用对象,而不是普通JS对象。修改方法如下:
1. 调整类型定义
首先把Transaction类型里的category从空对象改成Firestore的DocumentReference类型:
import { DocumentReference } from "firebase/firestore"; interface Transaction { category: DocumentReference; description: string; date: string; price: number; userId: string | null; } // 初始化时临时设为兼容类型,后续赋值实际引用 const transaction = { category: null as unknown as DocumentReference, description: "", date: "", price: 0, userId: null } as Transaction;
2. 修改addDoc代码
假设你的selectedOption包含categories集合中文档的ID(比如selectedOption.id),用Firestore的doc()函数生成文档引用,替换原来的对象展开逻辑:
import { doc, addDoc, collection } from "firebase/firestore"; await addDoc(collection(db, "transactions"), { ...inputValues, // 生成指向categories对应文档的引用 category: doc(db, "categories", selectedOption.id), userId: user?.uid, });
关键注意点
- 必须保证
selectedOption.id是categories集合中已存在文档的ID,否则会生成无效引用 - 存为Reference后,后续查询时可通过
getDoc()方法获取关联的分类文档数据
内容的提问来源于stack exchange,提问作者Ayhan
相关产品推荐
相关产品推荐

