Firebase Cloud Firestore: Управление индексами из кода - PullRequest
1 голос
/ 01 апреля 2020

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

Мой Сервер использует Express JS и Firebase Admin SDK. Я пытаюсь создать маршрутизатор CRUD для панели администратора, но получаю следующую ошибку:

"9 FAILED_PRECONDITION: для запроса требуется индекс. Вы можете создать его здесь: ...

Когда я получаю доступ к этому URL (...), я получаю сообщение об ошибке, у меня недостаточно прав ... Ну, во всяком случае, после некоторых исследований я понял, что для "сложных" запросов нужны индексы, и они имеют быть более чем одним.

Это мой текущий код маршрутизатора, поэтому вы можете увидеть, чего я хочу достичь:

// GET - Get users
router.get('/', async (req: Request, res: Response) => {
    ...
    let ref: any = db.collection('users').orderBy('createdAt');

    Object.keys(req.query).forEach(key => {
        ref = ref.where(key, '==', req.query[key]);
    });

    ...   
});

Как вы можете видеть, когда я повторяю ключ req.query, я добавление условного оператора в запрос. Моя идея состоит в том, чтобы программно добавлять пользовательские фильтры из клиента.

В соответствии с тем, что я понял из документации, я должен создать комплексный тип индекса для каждого свойства документа.

Поэтому, что я должен сделать, чтобы достичь упомянутой идеи? Заранее спасибо.

1 Ответ

1 голос
/ 01 апреля 2020

Составные запросы Firestore имеют некоторые ограничения. Один из них заключается в том, что для использования более чем одного метода, например «where» и «orderBy», необходимо создать индекс для этого запроса.

Так что в вашем случае, поскольку ваши запросы являются динамическими c, для каждого запроса вам нужно будет создать индекс. Я предлагаю вам использовать только «где» в ваших запросах, а в других фильтрах использовать javascript для фильтрации. Или перенесите в другую базу данных, например MongoDB.

Это ссылка на документацию Firestore, поясняющая составные запросы: https://firebase.google.com/docs/firestore/query-data/queries?hl=en-us

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