首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >:从代码管理索引

:从代码管理索引
EN

Stack Overflow用户
提问于 2020-04-01 04:41:20
回答 1查看 454关注 0票数 1

为了在集合中使用“复杂”查询,我尝试从Firebase实时数据库迁移到Cloud,但我发现了一些我不知道如何解决的“问题”。

我的服务器使用Express JS和Firebase Admin。我试图为我的管理仪表板创建一个CRUD路由器,但是我得到了以下错误:

"9 FAILED_PRECONDITION:查询需要一个索引。

当我访问那个URL (.)我犯了一些错误我没有足够的权限..。无论如何,经过一些研究后,我了解到“复杂”查询需要索引,而且它们必须不止一个。

这是我当前的路由器代码,您可以看到我想要实现的目标:

代码语言:javascript
复制
// 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键时,我正在向查询中添加一个条件语句。我的想法是从客户端逐步添加自定义过滤器。

根据我从文档中理解的内容,我应该为每个文档属性创建一个复杂的索引类型。

因此,我应该怎么做才能实现上述的想法?提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-04-01 05:54:44

Firestore复合查询有一些限制。一个是要使用多个方法,例如"where“和"orderBy",您需要为这个查询创建一个索引。

因此,在您的情况下,由于您的查询是动态的,您必须为每个查询创建一个索引。我的建议是,您只在查询中使用"where“,在其他过滤器中使用javascript进行筛选。或者迁移到另一个数据库,如MongoDB。

这是用于解释复合查询的Fi还原文档的链接:https://firebase.google.com/docs/firestore/query-data/queries?hl=en-us

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60963837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档