更新 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中文网其他相关文章!