首页 >web前端 >js教程 >如何更新 Firestore 中数组字段中的单个项目?

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

Linda Hamilton
Linda Hamilton原创
2024-11-15 10:02:03509浏览

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

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

FirebaseFirestore 文档介绍了与数组字段交互的方法,包括添加或删除元素。但是,它缺少直接更新数组内项目的方法。

对于如下文档:

{
 name: 'Foo',
 items: [
   {
     name: 'Bar',
     meta: {
        image: 'xyz.png',
        description: 'hello world'
     }
   },
   {
     name: 'Rawr',
     meta: {
        image: 'abc.png',
        description: 'hello tom'
     }
   }
 ]
}

要修改像 items[0].meta.description 这样的嵌套属性,以下方法不起作用:

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

this.design.update({
  [key]: property
}).then(() => { console.log("done") 
}).catch(function(error) { 
   message.error(error.message); 
});

它会删除目标数组索引中的所有属性,只保留描述

重写整个对象也是不可取的:

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
}).then(() => {
  this.setState({
    [key]: meta
  }) 
}).catch(function(error) { 
  message.error(error.message); 
});

它将整个项目数组转换为一个对象。

相反,从文档,在内存中进行更改,并更新整个修改后的数组字段:

const docRef = firestore.collection('collection').doc('document');

docRef.get().then(doc => {
  const items = doc.data().items;

  items[0].meta.description = "hello bar";

  docRef.update({
    items: items
  });
});

这确保仅更新数组中的预期属性元素。

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn