我有一些看起来像这样的对象:
{
...
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
})
但是这两个都只是擦除了对象,并用补丁替换了它,这意味着点标记无法正确识别。
我该如何解决?对于这种方法是否有解决方案,还是我应该使用子集合对其进行重构?
答案 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