reactjs 如何在Firestore中删除嵌套数组中的项?

6yoyoihd  于 2022-12-03  发布在  React
关注(0)|答案(2)|浏览(138)

我想从大写字母中删除类型'A'。我该怎么做呢?任何代码示例都将不胜感激。我正在处理一个react项目。

vnjpjtjt

vnjpjtjt1#

据我所知,在您共享的文档中没有 nested 数组。在这种情况下,您可以使用arrayRemove操作符从数组中删除唯一项:

const cityRef = doc(db, "cities", "capital");

await updateDoc(cityRef, {
    region: arrayRemove({ type: "A" })
});

这里需要注意几点:

  • 您可以将整个数组项目传递给arrayRemove运算子,因为它只会移除与您传递的值完全相符的数组项目。
  • arrayRemove操作会移除所有匹配的项。因此,如果数组中有多个{ type: "A" }项,所有项都会被移除。
  • 此操作只能对已知路径的数组字段起作用,不能对嵌套在另一个数组下的数组起作用。

如果您的用例不能满足上述任何一项要求,删除该项目的方法是:
1.加载文档并从中获取数组。
1.更新应用程序代码中的数组。
1.将整个顶级数组写回数据库。

6za6bjd0

6za6bjd02#

1.必须将doc和clone属性获取到临时对象中
1.修改临时对象(从区域数组中删除项)
1.使用临时对象更新原始文档
最干净的方法是通过firestore/事务来实现
一个小例子有一个小方法

const doc = await cityRef('cities/capital').get()
const temp =  JSON.parse(JSON.stringify(doc.data()))
temp.region = temp.region.filter(item => item.type !== 'A')
await cityRef('cities/capital').update(temp)

相关问题