Это не срабатывает, когда тот же документ создается
поднабор.
Это нормальное поведение.
На самом деле, если вы создадите документ непосредственно в коллекции messages
с полным путем rooms/{roomId}/messages/{messageWithRandomId}
, , промежуточные документы не будут созданы (т. Е. Нет roomId
документа).
Итак, когда вы говорите:
документ room
создается вместе с вложенной коллекцией
messages
содержащий документ с одним сообщением с randomId
, если вы только создали документ сообщения с randomId
, , то документ room
фактически не был создан, и, следовательно, облачная функция не сработала .
Консоль Firebase курсивом показывает «документ» комнаты roomId
как своего рода «контейнер» (или «заполнитель»), чтобы «материализовать» иерархию и позволить вам перейти к messageWithRandomId
документ сообщения, но документ комнаты не существует в базе данных Firestore.
Давайте рассмотрим более общий пример: представьте документ doc1
в коллекции col1
col1/doc1/
и еще один subDoc1 в коллекции subCol1 (sub-)
col1/doc1/subCol1/subDoc1
На самом деле, с технической точки зрения, они совсем не связаны друг с другом. Они просто разделяют часть своего пути, но не более того. Одним из побочных эффектов этого является то, что если вы удаляете документ, его подколлекция (ы) все еще существует.
Это означает, что вы должны либо:
Создайте себе документ roomId
в коллекции rooms
OR
запускает вашу облачную функцию с помощью:
export const testfunction = functions.firestore.document('rooms/{_someRoom}/messages/{_someMessage}').onCreate(async (snapshot,context) => {
//.....
}