首页 > 解决方案 > 更新嵌套数组对象中的字段值

问题描述

我有看起来像这样的对象:

{
  ...
  someArray: [
    {
      id: 1548,
      amount: 153,
      done: 0
    }
  ]
  ...
}

由于这些对象可能变得非常大,我不能set每次更新它们时都使用它们,因为每次需要更新文档时发送 100kB 不是一种选择。

为了解决这个问题,我决定使用update所谓的“点符号”,示例用法是:

update({
  'a.b.c': true
})

资料来源:使用 {merge: true} 设置和更新之间的区别

所以我决定试一试,它对“普通”嵌套字段来说就像一个魅力,但我找不到如何为嵌套在数组中的对象做到这一点。

我尝试的是这样的:

update({
  'a.someArray.0.done': 153
})
update({
  'a.someArray[0].done': 153
})

但是这两个都只是删除了对象并用补丁替换它,这意味着点符号没有被正确识别。

我该如何解决这个问题?这种方法是否有解决方案,还是我应该使用子集合重构它?

标签: javascriptfirebasegoogle-cloud-firestore

解决方案


我相信这可能是您正在寻找的:

var washingtonRef = db.collection("cities").doc("DC");

// Atomically add a new region to the "regions" array field.
washingtonRef.update({
    regions: firebase.firestore.FieldValue.arrayUnion("greater_virginia")
});

https://firebase.google.com/docs/firestore/manage-data/add-data#update_elements_in_an_array


推荐阅读