更新嵌套数组对象中的字段值

时间:2019-09-27 17:55:11

标签: javascript firebase google-cloud-firestore

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

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

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

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

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

来源:Difference between set with {merge: true} and update

因此,我决定尝试一下,它对于“常规”嵌套字段来说就像是一种魅力,但是我找不到如何对嵌套在数组中的对象执行此操作。

我尝试过的是这个

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

但是这两个都只是擦除了对象,并用补丁替换了它,这意味着点标记无法正确识别。

我该如何解决?对于这种方法是否有解决方案,还是我应该使用子集合对其进行重构?

1 个答案:

答案 0 :(得分:0)

我相信这可能是您想要的:

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