Я использовал денормализацию базы данных в Firestore. Пользователь может легко сортировать своих друзей по его имени / буквам без проблем. Более того, Пользователь может видеть «друзей друзей», если только друг не отключил настройку видимости.
User(collection)
->User ID(Doc) -> Name: Name0
-> visibility: true
-> Friends (sub-collection)
->Friend1 ID (Doc) -> Name: friend1Name
-> visibility: true
->Friend2 ID (Doc) -> Name: friend2Name
-> visibility: true
->Friend3 ID (Doc) -> Name: friend3Name
-> visibility: false
->...
->User ID(Doc) -> ...
Эта структура породила две проблемы: когда пользователь хотел отсортировать своих друзей друзей по имени / буквам, он должен вызвать друзей (подколлекцию) всех своих друзей, чтобы выполнить успешную сортировку. Итак, номер звонка напрямую зависит от количества его друзей.
Во-вторых, когда Пользователь изменил свои настройки видимости, необходимо обновить видимость денормализованных данных, где он зарегистрирован в подколлекциях Друга. Поэтому, если вы запускаете его из «Облачных функций», количество вызовов документов напрямую зависит от количества друзей Пользователя. Для обоих выпусков стоимость открыта.
Я буду рад, если в Firestore найдется альтернативная бесплатная структура для решения этих проблем.