首页 > web前端 > js教程 > 正文

如何更新 Firestore 中嵌套数组字段中的单个项目?

Barbara Streisand
发布: 2024-11-26 03:03:13
原创
573 人浏览过

How to Update a Single Item in a Nested Array Field in Firestore?

如何更新 Firestore 中数组字段中的单个项目

在 Firestore 中,数组可以嵌套在文档中。但是,重要的是要了解 Firestore 中的数组字段的行为与其他编程语言中的数组不同。

问题陈述:
更新 Firestore 文档中数组字段中的特定元素可能具有挑战性。尝试直接更新数组中的嵌套字段(例如 items[0].meta.description)可能会导致意外结果。

初始方法:
最初,您尝试过使用以下代码更新嵌套字段:

const key = `items.${this.state.index}.meta.description`;
const property = `hello bar`;

this.design.update({
    [key]: property
})
登录后复制

但是,此方法从指定索引处的对象。

替代方法:
在后续尝试中,您重写了整个元对象:

const key = `items.${this.state.index}.meta`;
const property = e.target.value;
let meta = this.state.meta;
meta[e.target.id] = property;

this.design.update({
    [key]: meta
})
登录后复制

虽然此方法已成功更新嵌套字段,它将数组转换为object.

解决方案:
Firestore 不提供直接方法来更新数组中的特定项目。相反,您必须从文档中读取整个数组,在内存中对其进行修改,然后更新整个数组字段。

这可以通过以下步骤来实现:

  1. 使用 get() 方法从文档中读取整个数组。
  2. 使用 map() 或 find() 等方法来定位和修改文档中的特定元素数组。
  3. 使用 set() 或 update() 方法使用修改后的数组更新数组字段。

以下是示例代码:

const docRef = firestore.doc(`document/${id}`);

let items;
// Read the document and retrieve the items array
await docRef.get().then((doc) => {
  if (doc.exists) {
    items = doc.data().items;
  }
});

// Update the specific element in the array
const updatedItem = items.find((item) => item.name === 'Bar');
updatedItem.meta.description = 'hello bar';

// Update the entire array field with the modified array
await docRef.update({ items });
登录后复制

以上是如何更新 Firestore 中嵌套数组字段中的单个项目?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板