Есть ли способ добавить собственную коллекцию пути в Firestore, если родительский документ не пуст? - PullRequest
1 голос
/ 16 марта 2019

Я создаю схему "глубокого" пути в Firestore.(6 частей пути, 3 коллекции и 3 документа) Что-то вроде collection/document/collection/document/collection/document или в более реальном примере: comments/{category_name}/videos/{video_id}/usercomments/{auto_generated_id}

Таким образом, проблема в том, что Firestore позволяет добавлять документ во вложенную вложенную коллекцию для любого путидля документа, который в настоящее время не существует.Таким образом, при добавлении документа комментария пользователя в конце пути, он автоматически добавит документы video_id и category_name, если они еще не существуют, но документы пусты (или, как сказано в консоли, «don»).'t Существует ") и, следовательно, не появляются в запросах или снимках.

Что произойдет, так это то, что в коллекции usercomments будет много документов, но я не могу получить список video_ids, потому что документы в коллекции videos технически все "пустой».

Как я могу сохранить эту логическую схему пути и при этом иметь возможность запрашивать документы более высокого уровня, которые не имеют полей?Есть ли способ проверить при добавлении комментария, существует ли в данный момент video_id, а если нет, просто добавить поле типа boolean exists: true?

РЕДАКТИРОВАТЬ: Я предполагаю, что единственный способ будет добавить поле exists: true через облачные функции при создании документа, но я не уверен, что при создании документа вПодборка нового документа от клиента вызовет функцию создания документа более высокого уровня или нет.Я обновлю, как только узнаю это.

ОБНОВЛЕНИЕ: Благодаря @Renaud Tarnec за информацию, я смог создать облачную функцию, которая будет устанавливать документы более высокого уровня споле так, что они «существуют» / фактически созданы.Оказывается, вы можете извлечь все подстановочные знаки из контекста пути вложенных документов в функции для правильного динамического редактирования полей документов более высокого уровня.

1 Ответ

1 голос
/ 16 марта 2019

На самом деле следующее утверждение в вашем вопросе не является точным: «оно автоматически добавит документы video_id и category_name, если они еще не существуют».

Если вы создаете документ непосредственно под usercommentsколлекция с полным путем comments/{category_name}/videos/{video_id}/usercomments, промежуточные документы не будут создаваться (то есть без comment или video документов).

Консоль Firebase показывает их курсивом, чтобы«материализовать» иерархию и позволить вам перейти к usercomment документу, но их нет в базе данных Firestore .

Давайте рассмотрим пример: представьте документ v1под

comments/cat1/videos/v1

и еще одним uc1 под

comments/cat1/videos/v1/usercomments/uc1

На самом деле с технической точки зрения они вообще не связаны друг с другом.Они просто разделяют часть своего пути, но больше ничего.Одним из побочных эффектов этого является то, что если вы удаляете документ, его под-коллекции все еще существуют.

Итак, если вы хотите иметь возможность запрашивать эти родительские документы, вам придется создавать их самостоятельно.

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