По мере роста количества документов в коллекции и увеличения количества элементов в массиве этот поиск станет очень неэффективным?
Проблема не в том, чтопоиск станет очень неэффективным, проблема в том, что документы имеют пределы.Таким образом, существуют некоторые ограничения в отношении объема данных, которые вы можете поместить в документ.Согласно официальной документации, касающейся использования и ограничений :
Максимальный размер документа: 1 МБ (1 048 576 байт)
Как видно, вы ограничены 1 МБ данных в одном документе.Когда мы говорим о хранении текста, вы можете хранить в значительной степени, но по мере увеличения массива будьте осторожны с этим ограничением.
Если вы храните большой объем данных в массивах, и эти массивы должны обновляться партиямиУ пользователей есть еще одно ограничение, о котором вам нужно позаботиться.Таким образом, вы ограничены 1 записью в секунду на каждый документ.Поэтому, если у вас есть ситуация, когда многие пользователи пытаются одновременно записать / обновить данные в одни и те же документы, вы можете увидеть, что некоторые из этих операций записи завершаются неудачно.Поэтому будьте осторожны и с этим ограничением.
Как вы, наверное, заметили, запросы в Cloud Firestore очень быстрые, и это потому, что Firestore автоматически создает индексы для любых полей, которые есть в вашем документе.
Если вы думаете, что вы будете запрашивать родителя, основываясь на том, что он содержит определенный член коллекции, используйте карты, а не массивы.
Существует много публикаций, в которых говорится, что массивы не работаютхорошо в Cloud Firestore, потому что, когда у вас есть данные, которые могут быть изменены несколькими клиентами, очень легко запутаться, потому что вы не можете знать, что происходит и в каком поле.Если я использую карту и пользователи хотят редактировать несколько разных полей, даже одно и то же поле, мы обычно знаем, что происходит.В массивах дело обстоит иначе.Подумайте, что может произойти, если пользователь захочет изменить значение с индексом 0, другой пользователь захочет удалить значение с индексом 0, в результате вы получите совершенно другой результат, а почему бы и нет, исключить массив за пределами границ.Так что действия Firestore с массивами немного отличаются.Таким образом, вы не можете выполнять такие действия, как вставка, обновление или удаление по определенному индексу.Но если вас не интересует точный порядок хранения элемента в массиве, вам следует использовать массивы.Firestore добавил несколько дней назад некоторые функции для добавления или удаления определенных элементов, но только если их не заботит точное расположение.См. здесь официальную документацию.
В заключение, поместите данные в один и тот же документ, только если вам нужно, чтобы они отображались вместе.Также не делайте их такими большими, чтобы загружать больше данных, которые вам действительно нужны.Поэтому размещайте данные в сборе, когда вы хотите искать отдельные поля этих данных или если вы хотите, чтобы ваши данные имели место для роста.Оставьте ваши данные в виде поля карты, если вы хотите использовать родительский объект на основе этих данных.И если у вас есть элементы, которые вы обычно используете в качестве флагов, продолжайте с массивами.
Также не беспокойтесь о медленный запрос в Firestore.