Firebase指定文档ID写入后,${yId}更新操作问题排查
问题分析与解决方案
嘿,我来帮你理清问题出在哪~
你当前代码的核心错误在于:Firebase 文档ID不允许包含斜杠(/)。斜杠是Firebase用来区分「集合-文档-子集合」层级的特殊符号,你写的${xId}/${yId}会被Firebase解析成:
集合
sche下的文档xId,再往下的子集合yId里的某个文档(但你没指定这个子集合里的文档ID)
这完全不是你想要的「单个文档ID」的效果,自然没法正确更新目标文档。
两种正确的实现方式
根据你的需求(关联xId和yId,更新特定yId对应的文档),推荐两种方案:
方案1:使用子集合(更符合Firebase数据结构最佳实践)
把xId作为父文档,yId放在对应的子集合里,这样层级清晰,也方便后续按xId批量操作:
// 定位到xId下子集合subSche中的yId文档 const targetDocRef = this.db.collection('sche').doc(xId).collection('subSche').doc(yId); // 执行更新(merge: true表示只更新传入的字段,保留其他原有字段) targetDocRef.set(data, { merge: true });
方案2:用其他分隔符拼接文档ID
如果不想用子集合,可以用下划线、连字符等替代斜杠,把xId和yId拼接成合法的文档ID:
// 用下划线拼接xId和yId作为文档ID const validDocId = `${xId}_${yId}`; const targetDocRef = this.db.collection('sche').doc(validDocId); targetDocRef.set(data, { merge: true });
如何更新特定yId的文档
不管用哪种方案,只要你知道对应的xId和yId,直接按照上面的代码定位到目标文档,调用set(data, {merge: true})就能完成更新啦~
内容的提问来源于stack exchange,提问作者AngularNewbie
相关产品推荐
相关产品推荐

