You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 08:10:19