Варианты составного запроса Firebase Firestore - PullRequest
0 голосов
/ 09 октября 2018

У меня динамически сгенерированный запрос Firestore, например:

    let db = firebase.firestore().collection('vehData')

    if (this.filters.model.selected) {
      db = db.where('Model', '==', this.filters.model.selected)
    }

    if (this.filters.condition.selected) {
      db = db.where('TitleStatus', '==', this.filters.condition.selected)
    }

    if (this.filters.year.selected) {
      db = db.where('Year', '==', this.filters.year.selected)
    }

    if (this.filters.autopilot.selected) {
      db = db.where('Autopilot', '==', this.filters.autopilot.selected)
    }

    if (this.filters.battery.selected) {
      db = db.where('Battery', '==', this.filters.battery.selected)
    }

    if (this.filters.sortBy.selected) {
      db = db.orderBy(this.filters.sortBy.selected, this.filters.sortBy.ascOrDesc)
    }

    db.limit(200).get().then((querySnapshot) => { ... })

this.filters - это просто модель данных для группы выбранных входов.

Однако проблема в том, чтоFirebase настаивает на том, что у меня есть составная установка индекса для каждого варианта вышеупомянутого запроса, например: Model ASC TitleStatus ASC ИЛИ Model ASC TitleStatus ASC Year ASC ИЛИ Model ASC TitleStatus ASC Year ASC Autopilot ASC

Создание индекса для каждого сценария / возможной комбинации фильтров не будеточевидно, у кого-нибудь есть советы, как мне обойти это ограничение?

Ответы [ 2 ]

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

Я создал скрипт для циклического прохождения всех возможных вариантов моего запроса с помощью JavaScript, поскольку индексы представлены в виде JSON, было легко создать упорядоченный процесс, как только я собрал логику для перестановки своих запросов.

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

В Firestore нет обходных путей для создания необходимых индексов.Единственный способ, которым Firestore может быть масштабируемым, - это требовать, чтобы каждый запрос использовал индекс.

Если вам не нужен ручной процесс создания каждого индекса, нажав ссылку в сообщении об ошибке, вы можетесоздайте файл правил Firestore для развертывания с помощью Firebase CLI .Можно было бы написать некоторый код для автоматического вычисления и заполнения файла.Как только это будет сделано, вам больше не придется создавать индексы вручную, предпочитая использовать CLI для однократного развертывания правил.

Когда вы используете CLI для инициализации нового пространства проекта, скажите, что хотите инициализировать Firestoreи он сгенерирует базовый файл json, который вы сможете изменить и развернутьОбычно вы проверяете файлы проекта Firebase CLI в системе контроля версий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...