Обновить значение поля в объекте вложенного массива - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть объекты, которые выглядят примерно так:

{
  ...
  someArray: [
    {
      id: 1548,
      amount: 153,
      done: 0
    }
  ]
  ...
}

Поскольку эти объекты могут стать достаточно большими, я не могу просто использовать set каждый раз, когда обновляю их, так как отправляю 100 КБ каждый разМне нужно обновить документ, а не вариант.

Чтобы решить эту проблему, я решил использовать update с так называемой «нотацией точек», пример использования:

update({
  'a.b.c': true
})

Источник: Разница между набором с {merge: true} и обновлением

Поэтому я решил попробовать и это сработало как "обычные "вложенные поля, но я не могу найти, как я могу сделать это для объектов, которые вложены в массивы.

Я пытался это так:

update({
  'a.someArray.0.done': 153
})
update({
  'a.someArray[0].done': 153
})

Но обаиз них просто стерли объект и заменили его патчем, что означает, что нотация точек не была распознана должным образом.

Как я могу решить эту проблему?Есть ли решение для такого подхода или я должен просто реорганизовать его, используя подколлекцию?

1 Ответ

0 голосов
/ 27 сентября 2019

Я считаю, что это может быть то, что вы ищете:

var washingtonRef = db.collection("cities").doc("DC");

// Atomically add a new region to the "regions" array field.
washingtonRef.update({
    regions: firebase.firestore.FieldValue.arrayUnion("greater_virginia")
});

https://firebase.google.com/docs/firestore/manage-data/add-data#update_elements_in_an_array

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...