在 firebase 中我有这样的数据结构:
是一个地图数组,里面有一些值。
(使用 JavaScript)例如,如果我只想更新位置 1 处数组的字段“field1”而不更新整个“ArrayTest”,我该怎么做?
我尝试了这样的解决方案:
const exampleFunction = async () => {
const usersDocRef = firestore().collection('users').doc(docID);
usersDocRef.update({
'ArrayTest.1.field1': "newFoo",
})
}
但是发生的情况是,它从“ArrayTest”中删除了所有其他内容,留下了这样的结构:
ArrayTest
- [1]
- field1: "NewFoo"
显然我不想编辑或删除结构的其余部分,只是一个字段,我该怎么做?
不幸的是,您无法通过 firestore 中的索引直接访问数组。尽管您可以通过实现读取文档、获取数组、更新特定元素/字段,然后更新文档中的数组的解决方案来解决此问题。
这是一个例子:
const doc = await docRef.get();
const array = doc.data().array; // change `array` for the field name
// update array field
array[1].field1 = 'bar';
await docRef.update({ array });
注意,此示例假设
docRef
已定义。
这是一个非常基本的示例,您需要根据您的要求进行更改,但它显示了基本原理。
请注意,这也不是最佳解决方案,因为现在您只是为了更新字段而需要进行读取和写入操作,因此这在时间和金钱方面都更加昂贵。我不可能说是否有办法解决您的问题,首先避免更新数组,所以我的第一个方法是首先查看是否有其他可以实现的解决方案,如果没有,请使用类似于上面示例的方法。希望这有帮助!