Firestore предлагает следующее, что, очевидно, не сработает:
participants Arrays
hidden.`48m6lKjwvKUOboAxlc0ppX2R7qF2` Ascending
createdAt Descending
Вы можете создать такой индекс, и он будет работать, но проблема возрастет, если ваше приложение станет популярными у вас будет большое количество пользователей.Это означает, что для каждого разговора вам нужно будет создать индекс, и это не очень хорошая идея, потому что когда дело доходит до индексов, существуют некоторые ограничения.В соответствии с официальной документацией относительно использования и ограничений Firestore :
максимальное количество составных индексов для базы данных: 200
Число, которое может быть достигнуто очень быстро.
Полагаю, что выравнивание карты было бы решением
Вы угадали.Эта практика также называется denormalization
и является обычной практикой, когда дело доходит до Firebase.Если вы новичок в базах данных NoQSL, я рекомендую вам посмотреть это видео, Денормализация нормальна с базой данных Firebase для лучшего понимания.Это для базы данных реального времени Firebase, но те же правила применяются к Cloud Firestore.
Кроме того, когда вы дублируете данные, есть одна вещь, которую нужно иметь в виду.Точно так же, как вы добавляете данные, вы должны поддерживать их.Другими словами, если вы хотите обновить / обнаружить элемент, вы должны сделать это в каждом месте, где он существует.
Для получения дополнительной информации, пожалуйста, также посмотрите мой ответ из следующего поста:
Таким образом, вы можете денормализовать свою базу данных и создать conversations
без необходимости создания индексов.Для вашего варианта использования вам следует рассмотреть возможность дополнения структуры данных, чтобы разрешить обратный поиск, создав новую коллекцию или вложенную коллекцию с именем userConversations
, которая может хранить в качестве документов все разговоры, которые имеет пользователь.Для простого запроса индекс не нужен.