Я пытаюсь использовать 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.info("Contact " + receiverId + " alert successfully updated!");
});
}
Я получаю такую ошибку:
FirebaseError: [code=invalid-argument]: Invalid document reference. Document references must have an even number of segments, but books/33KlbrBypXMe888vpO7dXgDVrfY2/hLh7Ao7IABZBukEpGFK1I8lq1rx1 has 3



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


По сути, структура базы данных должен go collection, document, collection, document и т. д.
Это прямо указано в документации:
Documents live in collections, which are simply containers for documents.
и
A collection contains documents and nothing else. It can't directly contain raw fields with values, and it can't contain other collections.
Если бы вы могли поделиться дополнительной информацией о желаемой структуре (например, более полным снимком экрана), это могло бы помочь. Этот пример о том, как преобразовать в правильно вложенную коллекцию / настройку документа, также может помочь.
Вы передаете часть пути поля в вызов doc(). Это не сработает, так как вам нужно передать (только) идентификатор документа в doc. После этого вы создаете путь к полю, которое хотите обновить, разделяя сегменты пути с помощью ..
var value = {};
value[receiverId+"."+type] = bool;
this.afs.firestore
.collection("books")
.doc(senderId)
.update(value)
Также см. документация по обновлению полей во вложенном объекте.