Запросить Firestore по UserID и диапазону дат? - PullRequest
0 голосов
/ 18 ноября 2018

Мне нужно запросить Firestore, но он постоянно говорит мне, что мне нужен индекс.Проблема в том, что это нереально, так как КАЖДОМУ пользователю потребуется индивидуальный индекс на основе его UserId.В целях безопасности я не могу разрешить кому-либо доступ, если только canAccess.${userID} == true, как в примере ниже.Но если бы я взял ВСЕ элементы и отфильтровал их по дате на стороне клиента, я бы выбирал сотни тысяч элементов каждый раз, когда меняю диапазон дат, поэтому это не практично.

this.db.collection('items')
       .where(`canAccess.${userId}`, '==', true)
       .where('date', '>=', startDate)
       .where('date', '<=', endDate);

Как можно собирать только те элементы, к которым им разрешен доступ, и только в выбранном диапазоне дат?

1 Ответ

0 голосов
/ 18 ноября 2018

Вам нужно будет реструктурировать свои документы, чтобы выполнить этот запрос. Попробуйте поместить uid, которые могут получить доступ к документу, в поле с типом List, называемым canAccess. Затем запросите список с помощью array-contains после создания индекса для этого поля.

this.db.collection('items')
       .where('canAccess', 'array-contains', userId)
       .where('date', '>=', startDate)
       .where('date', '<=', endDate);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...