В Firestore у меня есть Документ со свойством (названным "items") типа array.Массив содержит 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
}
Из пользовательского интерфейса пользователь может обновитьсвойство 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) });
}
});
}
Еще один недостаток удаления и добавления элемента внутри массива заключается в том, что обновленный элемент мерцает в пользовательском интерфейсе.