Firestore无法使用日期作为集合名称写入问题求助
解决方案
问题原因
- 触发报错的核心原因有两个:
- Firestore的
collection()方法要求传入的集合路径必须是非空字符串类型,new Date().getTime()返回的是数字类型,直接作为路径参数会触发类型校验失败 - 示例代码存在变量名不匹配问题:你将时间戳赋值给了
result变量,但调用collection()时传入的是未定义的date变量,也会导致路径为空报错
- Firestore的
修复方案
1. 立即可用的代码修正
将时间戳变量转为字符串类型,同时修正变量名即可正常运行,修正后代码如下:
const d1 = new Date(); const result = d1.getTime(); console.log('Epochtime',result); // 两种转字符串的方式二选一即可:String()转换 或者直接拼接空字符串 database.collection("stock1").doc("exchange1").collection(String(result)).doc('prices').set({"price":"price_value"})
2. 存储结构优化建议
你当前基于SQL思路设计的存储结构后续查询效率偏低,可做适配Firestore特性的调整:
- 无需将日期作为集合名称,可在
prices文档中新增timestamp字段存储时间戳,后续按时间范围查询时直接用where条件筛选即可,更适配NoSQL的查询逻辑 - 如果确实需要按日期拆分集合,建议使用
YYYY-MM-DD格式的字符串作为集合名,可读性更高,也便于后续按天批量操作数据
内容的提问来源于stack exchange,提问作者salsa_moreca
相关产品推荐
相关产品推荐

