在Firestore中,我有一个文档,该文档具有类型为array的属性(名为“ items”)。该数组包含ShoppingItem
个对象,其结构如下:
export class ShoppingItem {
id?: string;
name: string;
checked = false;
}
为了完整起见,在文档结构下面:
export interface ShoppingList {
id: string;
name?: string;
items: ShoppingItem[]; // <-- This is the array property I am updating
}
通过UI,用户可以更新对象的checked
属性,而我想相应地更新数据库。我从Firebase文档中了解到,我们可以使用arrayRemove/arrayUnion
原子地删除/添加数组项。
为了更新现有项目,我是否必须每次删除(嵌套承诺)时都删除旧对象并添加新对象,如下所示?还是有可能以更优雅的方式?
updateItem(listId: string, item: ShoppingItem) {
const docRef = this.db.collection("list").doc(listId)
return docref.update({ items: firestore.FieldValue.arrayRemove(item) })
.then(() => {
{
docRef.update({ items: firestore.FieldValue.arrayUnion(item) });
}
});
}
在数组中删除和添加项目的另一个缺点是,UI中更新的元素 flicker 。
答案 0 :(得分:0)
仍然,无法更新对象数组的特定字段。 (arrayRemove / arrayUnion)是唯一的解决方案。