我正在尝试使用KeyPath方法删除Firestore文档中的字段。
换句话说,我将请求主体转换为keyPath字符串。
示例,转换以下请求正文:
{
"preferences": {
"settings":{
"v1.4.3": [
"apple"
]
}
}
}
进入密钥路径:"preferences.settings.v1.4.3"
然后使用此keyPath通过以下方法删除路径
await userRef.update({
"preferences.settings.v1.4.3": admin.firestore.FieldValue.delete(),
lastUpdated: timestamp,
});
如果keyPath字符串中不包含点,则可以正常工作,但如果包含点,则假定v1
是一个包含键为4
的字段的对象。
我也尝试使用set
函数删除该字段(请参见下面的示例),但似乎不起作用
await userRef.set(
{
{
"preferences": {
"settings":{
"v1.4.3": null
}
}
},
lastUpdated: timestamp,
},
{ merge: true }
);
请问如何解决这个问题。
1条答案
按热度按时间qvtsj1bj1#
update
操作将点(.
)解释为存在子场的指示。写入名称中有文字点的字段的选项包括:
set
/setDoc
,它不会将点解释为分隔符。如果要更新文档的子集,请传递{ merge: true}
,如此处的第二个代码示例所示。FieldPath
object作为字段名称,而不只是字符串值。