San*_*esh 8 javascript google-cloud-firestore
我正在尝试更新/删除Firestore文档中的字段,但是在尝试更新/删除它们时,名称中具有"句点"的字段似乎无声地失败.我有句号的原因是我使用URL作为对象中的键,我觉得这是一个半常见的用例.
例:
首先创建文档(这很好)
db.collection("data").doc("temp").set({
helloworld: {
key1: 'foo'
},
hello.world: {
key1: 'bar'
}
})
Run Code Online (Sandbox Code Playgroud)
如果您尝试删除没有句点的元素,它可以正常工作.
db.collection("data").doc("temp").update({
helloworld: firebase.firestore.FieldValue.delete()
})
// Value is Deleted
Run Code Online (Sandbox Code Playgroud)
如果您尝试删除没有句点的元素,它不会执行任何操作.
db.collection("data").doc("temp").update({
hello.world: firebase.firestore.FieldValue.delete()
})
// Nothing Happens!
Run Code Online (Sandbox Code Playgroud)
我也试过了
let u = {}
u['hello.world'] = firebase.firestore.FieldValue.delete()
db.collection("data").doc("temp").update(u)
// Nothing Happens!
Run Code Online (Sandbox Code Playgroud)
这是一个错误吗?是否支持字段名称中的句点?我可以创建元素但不删除它似乎很奇怪.
当您在更新或删除的名称中使用句点时,您需要将其用引号括起来,例如:
db.collection("data").doc("temp").update({
"hello.world": firebase.firestore.FieldValue.delete()
})
Run Code Online (Sandbox Code Playgroud)
或动态名称:
[`hello.${world}`]: firebase.firestore.FieldValue.delete()
Run Code Online (Sandbox Code Playgroud)
更新操作是hello.world作为一个点分隔的路径读取到一个word被嵌套的字段,如下所示:
{
hello: {
world: "Some value"
}
}
Run Code Online (Sandbox Code Playgroud)
如果您的名称中包含一个点的字段,则需要使用该字段FieldPath在更新中引用它:https:
//firebase.google.com/docs/reference/js/firebase.firestore.FieldPath
所以这就是你想要的:
doc.update(
firebase.firestore.FieldPath("hello.world"),
firebase.firestore.FieldValue.delete());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2170 次 |
| 最近记录: |