React Native环境下Firebase9如何给已有文档新增字段且不覆盖原有数据
你遇到的setDoc()覆盖原有数据的问题,是因为setDoc()默认直接替换整个文档内容,同时你之前的两段代码存在API误用、文档引用错误的问题,按照以下方式修改即可实现新增字段且不丢失原有数据:
方案1:使用setDoc()+合并配置(推荐,文档不存在时会自动创建)
setDoc()传入第三个参数{ merge: true }时,只会更新你传入的字段,原有字段全部保留:
import { setDoc, doc } from "firebase/firestore"; const updateUser = async(key, value) => { // 正确指定要更新的用户文档引用,文档ID为当前用户uid const userDocRef = doc(db, 'users', user.uid); await setDoc(userDocRef, { [key]: value }, { merge: true }); };
方案2:使用updateDoc()(仅适用于文档已存在的场景)
updateDoc()本身就是增量更新API,默认不会覆盖原有字段,但如果目标文档不存在会抛出报错:
import { updateDoc, doc } from "firebase/firestore"; const updateUser = async(key, value) => { // 注意此处文档ID必须为目标用户的uid,不能传入value作为ID const userDocRef = doc(db, 'users', user.uid); await updateDoc(userDocRef, { [key]: value }); };
注意事项
- 操作前确保文档引用的ID正确,你之前第二段代码错误将
value作为用户文档ID,会导致操作到错误的文档 - 如果需要更新嵌套层级的字段,使用点路径写法即可,例如更新
userInfo下的age字段:await updateDoc(userDocRef, { "userInfo.age": 20 })
你当前的Firestore数据参考:
你需要新增的字段参考:
内容的提问来源于stack exchange,提问作者user17466327
相关产品推荐
相关产品推荐

