Ограничьте количество документов в подгруппе правил пожарного депо - PullRequest
0 голосов
/ 29 октября 2018

Мой запрос довольно прост: ограничение количества документов во вложенной коллекции с использованием правил Firestore.

Я уже знаю, что можно узнать размер массива, используя .size(). Итак, вы можете спросить, почему я не использую массив для хранения своих предметов? Что ж, я хочу, чтобы «обычный» пользователь не мог обновлять поле родительского документа, но мог добавить документ в мою подколлекцию.

Я уже пытался сделать это:

match /slots/{slot} {
      allow read: if true;
      allow write: if getRole() == 'ADMIN';

      match /participants/{participant} {
        allow read: if true;
        allow create: if get(/databases/$(database)/documents/slots/$(slot)/participants).size() < 2;
        allow delete: if participant.data.id == request.auth.uid || getRole() == 'ADMIN';
      }
    }

Но get(/databases/$(database)/documents/slots/$(slot)/participants) не работает, так как get() следует использовать только для извлечения одного документа.

Может быть, я могу попробовать что-то с облачными функциями ...

Есть ли у меня решение моей проблемы? Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 29 октября 2018

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

Вы также можете использовать облачные функции для удаления документов из коллекции в ответ на добавление новых документов, но ограничение знания размера коллекции будет проблематичным. Может быть, лучше найти способ запроса для поиска документов для удаления (например, по метке времени), а не в зависимости от размера коллекции.

...