如何在Firebase对象中设置null或undefined类型的属性值?
Firebase 的update()操作默认会过滤值为undefined的属性,不会将这类属性的修改请求同步到服务端,所以你直接设置age: undefined不会触发该字段的任何变更。
两种场景的解决方案
场景1:需要将属性值设置为null
直接赋值null即可,Firebase 原生支持存储null类型的值:
const updateObject: Partial<SomeObject> = { name: "new name", age: null } userPlanReference.update(updateObject);
执行后age字段会保留,值更新为null。
场景2:需要彻底隐藏/删除age属性(从文档中移除该字段)
需要使用Firebase提供的删除哨兵deleteField()来标记字段删除,不同版本SDK用法如下:
- 模块化SDK(v9及以上主流版本)
// 首先从Firestore模块导入删除方法 import { deleteField } from "firebase/firestore"; const updateObject: Partial<SomeObject> = { name: "new name", age: deleteField() } userPlanReference.update(updateObject);
- 命名空间SDK(v8及更早版本)
const updateObject: Partial<SomeObject> = { name: "new name", age: firebase.firestore.FieldValue.delete() } userPlanReference.update(updateObject);
执行后age字段会被完全从文档中移除,后续查询返回的对象也不会包含该字段,完全符合你要隐藏属性的需求。
补充说明:上述
deleteField()的用法在set()方法配合{merge: true}的更新场景下同样生效。
内容的提问来源于stack exchange,提问作者methodinvocation
相关产品推荐
相关产品推荐

