javascript - 从 Firestore 数组中按键/值删除项目

标签 javascript arrays reactjs firebase google-cloud-firestore

我在 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/

相关文章:

javascript - Bootstrap 4 Beta 2 导航栏切换器不工作

javascript - 分解如何对数组中的数字进行排序

c - 将数组传递给函数

javascript - 从 React.js 中的 json 文件中获取数据

javascript - 尝试使用 "Monthpicker"Jquery UI 小部件并绑定(bind)更改

javascript 未在 html 中执行

javascript - 将变量值分配给模板中的表单字段

javascript - 对多维数组应用过滤器并返回过滤后的数据以及父级

javascript - 如何在映射 : ReactJS 中访问正确的 'this'

reactjs - 如何将 Font Awesome 添加到 Next.js 13 项目错误模块未找到