как обновить поле подколлекции firestore - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь update поле в пожарном депо, но я не могу найти правильный вызов:

changeAlertState(senderId, receiverId, alertType, bool){

  let type = alertType == 'toBe' ? 'toBeAlerted' : 'toAlert';

  this.afs.firestore
  .collection("books")
  .doc(senderId + '/' + receiverId)
  .update({
                        [type]: bool
                    })
  .then(() => {
                console.log("Contact " + receiverId + " alert successfully updated!");
            });
}

Вот БД: enter image description here

Я получаю эту ошибку:

FirebaseError: [код = неверный аргумент]: неверная ссылка на документ. Ссылки на документы должны иметь четное количество сегментов, но у books / 33KlbrBypXMe888vpO7dXgDVrfY2 / hLh7Ao7IABZBukEpGFK1I8lq1rx1 есть 3

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Вы передаете часть пути поля в вызов doc(). Это не сработает, так как вам нужно передать (только) идентификатор документа в doc. После этого вы строите путь к полю, которое хотите обновить, разделяя сегменты пути с помощью .

var value = {};
value[receiverId+"."+type] = bool;
this.afs.firestore
  .collection("books")
  .doc(senderId)
  .update(value)

Также см. Документацию об обновлении полей во вложенном объекте .

0 голосов
/ 10 января 2019

По сути, структура базы данных должна перейти к коллекции, документу, коллекции, документу и т. Д.

Это явно указано в документации :

Документы живут в коллекциях, которые являются просто контейнерами для документов.

и

Коллекция содержит документы и больше ничего. Он не может напрямую содержать необработанные поля со значениями и не может содержать другие коллекции.

Если бы вы могли поделиться дополнительной информацией о желаемой структуре (например, более полный скриншот), это помогло бы. Этот пример того, как преобразовать в правильно вложенную коллекцию / настройку документа, также может помочь.

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