Firebase Cloud Firestore:从代码管理索引



我正试图从Firebase实时数据库迁移到Cloud Firestore,以便在集合之间使用"复杂"查询,但我发现了一些我不知道如何解决的"问题"。

我的服务器使用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键时,我正在向查询添加一个条件语句。我的想法是从客户端程序化地添加自定义过滤器。

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

因此,为了实现上述想法,我应该做些什么?提前谢谢。

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

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

这是Firestore文档的链接,解释了复合查询:https://firebase.google.com/docs/firestore/query-data/queries?hl=en-美国

相关内容

最新更新