我在 Firestore 中有一个结构如下的数组:
palettes
0: {date: 2019-05-01, name: "First Palette", palette: [array]}
1: {date: 2019-05-02, name: "Palette 2", palette: [array]
palettes
数组中的每个项目都是一个调色板项目,在数组中包含日期、名称和调色板数据。
在我的 React 应用程序中,我试图通过引用其 name
值来删除 Firestore 数据库中的特定调色板,但没有成功。
例如,如果我从点击事件中传入了 paletteName
“Palette 2”,我该如何删除以该字符串作为名称值的调色板?
这是我尝试过的:
1.
const deletePalette = paletteName => {
db.collection('users').doc(user.uid)
.update({
palettes: firebase.firestore.FieldValue.arrayRemove({
name: paletteName
})
})
// ...
}
2.
const deletePalette = paletteName => {
db.collection('users').doc(user.uid)
.update({
palettes: firebase.firestore.FieldValue.arrayRemove(paletteName)
})
// ...
}
3.
const deletePalette = paletteName => {
const ref = db.collection('users').doc(`${user.uid}/palettes/`)
ref.update({
[paletteName]: firebase.firestore.FieldValue.delete()
})
// ...
}
4.
const deletePalette = paletteName => {
db.collection('users').doc(user.uid)
.update({
palettes: palettes.filter(
palette => palette.name !== paletteName
)
})
// ...
}
这些都没有做到。我在这里错过了什么?
最佳答案
您将无法使用 FieldValue.arrayRemove
。这仅适用于作为数组的顶级字段。您也无法通过一次操作完成此操作。
你必须
1) 将整个文档读入内存,
2)按照你想要的方式修改内存中的数组,
3)然后将字段更新回文档。
关于javascript - 从 Firestore 数组中按键/值删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56161199/