使用JavaScript导入JSON到Firestore时触发无效文档错误,求协助
问题分析与解决
核心错误原因
你用的JSON文件是Firebase Realtime Database的导出格式,但firestore-export-import的restore方法要求的是符合Firestore文档结构的JSON,两者格式不兼容,这才触发了“data不是有效Firestore文档”的错误。
具体问题点
JSON格式不匹配
Realtime Database的导出是层级嵌套的普通对象,比如{ "集合名": { "文档ID": { "字段": "值" } } },但Firestore的导入格式需要明确标记子集合(通过__collections__字段),结构示例如下:{ "cars": { "car_001": { "brand": "Toyota", "model": "Camry", "__collections__": {} } } }初始化参数错误
firestoreService.initializeApp的第二个参数应该传入Firebase项目的projectId,而不是Realtime Database的URL,你当前传入的firebaseConfig.databaseURL是实时数据库的地址,不符合Firestore初始化要求。
解决步骤
1. 转换JSON格式
把Realtime Database导出的JSON改成Firestore兼容的结构:
- 顶层键作为Firestore集合名
- 第二层键作为文档ID
- 每个文档里保留原字段,额外添加空的
__collections__字段(没有子集合时用空对象)
如果数据量小可以手动改,数据量大的话可以用脚本自动转换:
const fs = require('fs'); // 读取原RTDB导出文件 const rtdbData = require('./carapp-96076-default-rtdb-export.json'); const firestoreData = {}; // 遍历转换每个集合和文档 for (const collName in rtdbData) { firestoreData[collName] = {}; for (const docId in rtdbData[collName]) { firestoreData[collName][docId] = { ...rtdbData[collName][docId], "__collections__": {} }; } } // 写入转换后的文件 fs.writeFileSync('./firestore-ready.json', JSON.stringify(firestoreData, null, 2));
2. 修正初始化代码
把初始化部分的参数改成Firebase项目ID:
// 修改initializeApp调用 await firestoreService.initializeApp(serviceAccount, { projectId: "carapp-96076" // 替换成你的Firebase项目ID });
3. 重新执行导入
用转换后的JSON文件替换原文件路径,再运行node import.js即可。
内容的提问来源于stack exchange,提问作者user14963385
相关产品推荐
相关产品推荐

