如何删除Firestore文档中含点号键名的字段?
解决Firestore删除带点号键名字段的问题
当字段名包含点号时,不能用字符串形式的路径(比如"preferences.settings.v1.4.3"),因为Firestore会把路径里的点当成层级分隔符,误把v1.4.3拆成v1下的4字段。正确的做法是用嵌套对象结构来指定目标字段,结合FieldValue.delete():
await userRef.update({ preferences: { settings: { "v1.4.3": admin.firestore.FieldValue.delete() } }, lastUpdated: timestamp });
为什么之前的方法无效?
- 字符串路径方式:Firestore会解析路径中的每个点为层级,所以
"preferences.settings.v1.4.3"会被理解为preferences > settings > v1 > 4 > 3,和实际的键名v1.4.3不匹配。 set方法设null:在Firestore中,把字段设为null只是将字段值置为null,并不会删除该字段,必须用FieldValue.delete()才会真正移除字段。
如果需要批量处理这类带点号的字段,也可以保持嵌套对象的结构,确保每个带点号的键都作为对象的属性直接定义,而不是拼接成字符串路径。
内容的提问来源于stack exchange,提问作者AliOz
相关产品推荐
相关产品推荐

