我需要查询Firestore,但它总是告诉我我需要索引。问题在于这是不现实的,因为每个用户都需要基于其UserId的自定义索引。为了安全起见,除非以下示例中的canAccess.${userID} == true
,否则我不允许任何人访问。但是,如果我要提取所有项目,并按日期在客户端进行过滤,那么每次更改日期范围时,我都会获取成千上万的项目,因此这是不切实际的。
this.db.collection('items')
.where(`canAccess.${userId}`, '==', true)
.where('date', '>=', startDate)
.where('date', '<=', endDate);
如何只在选定的日期范围内获取允许访问的项目?
答案 0 :(得分:1)
您必须重组文档才能执行此查询。考虑将可以访问文档的uid放在名为canAccess
的列表类型的字段中。在该字段上创建索引后,然后使用array-contains
查询列表。
this.db.collection('items')
.where('canAccess', 'array-contains', userId)
.where('date', '>=', startDate)
.where('date', '<=', endDate);