Шардинг, безусловно, может сработать. Трудно сказать, не зная точно, какие данные вам понадобятся в вашем документе и когда, но это, безусловно, разумный вариант. Вы также можете рассмотреть возможность создания родительского «сводного» документа, содержащего поля, по которым вы можете искать, а затем разбить все ваши данные на несколько документов внутри вложенной коллекции этого родителя.
Здесь есть один важный нюанс: ограничение не 20 000 полей, а 20 000 проиндексированных полей. Поэтому, если вы храните кучу данных внутри документа, но знаете, что не будете искать по всем из них, другой альтернативой является пометить некоторые из ваших полей как неиндексированные (что вы можете теперь сделать в Консоль Firebase в разделе «Исключения»).
Однако, если вы имеете дело с тысячами полей, вы, вероятно, не захотите освобождать их все по одному, поэтому лучшей альтернативой может быть размещение ваших данных в виде карты внутри поля контейнера (называемого чем-то например, «allOfMyData»), просто пометьте это поле как неиндексированное. Это автоматически удалит все индексы из любых полей, содержащихся в этой карте.