Правила Firestore «позволяют создавать» создают документ с другим идентификатором, если он уже существует - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть правило Firestore allow create, которое запрещает создание документа, если его идентификатор уже существует. Когда это произойдет, я хочу создать новый документ с другим случайным идентификатором.

Например, я хочу создать 10 документов с идентификаторами 1,2,3 ... 10. Однако идентификаторы 2,3,4 уже существуют и не будут созданы, поэтому я хочу создать 3 документа со случайными идентификаторами (например, 11, 12, 13).

Как мне сделать sh это? Спасибо.

1 Ответ

2 голосов
/ 26 февраля 2020

Правила безопасности не смогут помочь вам обеспечить это. Кроме того, то, что вы пытаетесь сделать, не очень подходит для Firestore, и я тоже это обсудю.

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

Кроме того, Firestore не очень подходит для использования последовательных документов. Идентификаторы в массовом масштабе, на котором он предназначен работать. Предпочтительный подход заключается в создании случайных идентификаторов документов с помощью add () на клиенте. Если вам нужно наложить какой-либо порядок на этот документ, вы должны использовать для этого значение поля документа или иметь другой документ с массивом, который определяет порядок.

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

Также ничего не стоит, чтобы правило allow create никогда не срабатывало, если документ уже существует. Как только документ существует, клиент может только обновить или удалить его. Если вы хотите запретить клиенту обновлять уже существующий документ, вам просто нужно убедиться, что нет правила allow write или allow update, позволяющего выполнить это обновление.

...