4

I know how to READ and WRITE a document in Firestore, But how does one update() a Value of and object in an array of Maps without removing/deleteing? Just changing one value if needed.

I have a Form that includes a FormArray, that are able to edit as an when there is an update on the price list.

product = {
  id: "product id",
  brand: "Brand Name",
  model: "This is the model of the brand"
  lists: [
    { location: "Location 1", price: "0.00" },
    { location: "Location 2", price: "0.00" }
  ]
}

Component.ts

    export class PageComponent implements OnInit {
      productDoc: AngularFirestoreDocument<Product>;
      product: Observable<any>;
    }

constructor(private afs: AngularFirestore) {}

  update() {
    this.productDoc.update({ amount: this.updatedProduct });
  }

Appreciate to shine some light on it, Thank You!

Frank van Puffelen
  • 565,676
  • 79
  • 828
  • 807
syahiruddin
  • 401
  • 5
  • 14

1 Answers1

8

There is no way to change a value in an array. You'll either have to remove the old combination of values and add the new combination, or have to:

  1. Read the document.
  2. Get the entire array from that document.
  3. Modify the array in your application code.
  4. Write the modified array back to the database in its entirety.

Alternatively, you can store the lists in a map field rather than an array field, meaning that you give a name to each set of values - and you can the use dot notation to update the nested field.

Frank van Puffelen
  • 565,676
  • 79
  • 828
  • 807