Firebase数据库编辑数据报错:集合引用段数异常,请求帮助
问题分析与解决
错误原因
你碰到的Invalid collection reference错误,根源在于两点:
collection()函数用于创建集合引用,集合路径的段数必须是奇数(比如namirnice是1段,namirnice/xxx/subcoll是3段),但你写的namirnice/${uuid}是2段,不符合集合的路径规则。- 你实际要操作的是文档(把数据存入
namirnice集合下的某个文档),而非集合,所以不该用collection(),应该用doc()来获取文档引用。
修正后的代码
场景1:添加新文档(自定义ID)
如果想用uid()生成的ID创建新文档,用setDoc即可(文档不存在时自动创建,存在则覆盖全量数据):
const addNewData = async (e) => { e.preventDefault(); let data = { sifra: sifraRef.current.value, naziv: nazivRef.current.value, detalji_dijete: detaljiRef.current.value, opis: opisRef.current.value, broj_obroka: brojObrokaRef.current.value, napomena: napomenaRef.current.value }; const uuid = uid(); // 用doc()构造文档引用:集合名 + 文档ID await setDoc(doc(db, 'namirnice', uuid), data); close(); }
场景2:更新已有文档
如果是要修改已存在的文档,确保uuid是目标文档的真实ID,用updateDoc(仅更新指定字段,不会覆盖整个文档):
const addNewData = async (e) => { e.preventDefault(); let data = { sifra: sifraRef.current.value, naziv: nazivRef.current.value, detalji_dijete: detaljiRef.current.value, opis: opisRef.current.value, broj_obroka: brojObrokaRef.current.value, napomena: napomenaRef.current.value }; // 这里替换成你要更新的目标文档ID,不要生成新ID const targetDocId = "目标文档的ID"; await updateDoc(doc(db, 'namirnice', targetDocId), data); close(); }
额外提示
如果不需要手动指定文档ID,Firebase的addDoc可以自动生成ID,写法更简洁:
await addDoc(collection(db, 'namirnice'), data);
内容的提问来源于stack exchange,提问作者user18029026
相关产品推荐
相关产品推荐

