Firebase обновляет объект внутри вложенного массива - PullRequest
0 голосов
/ 27 января 2019

В 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) });
    }
  });
}

Еще один недостаток удаления и добавления элемента внутри массива заключается в том, что обновленный элемент мерцает в пользовательском интерфейсе.

...