gpt4 book ai didi

javascript - 如何基于 Promise 的动态响应构建 Firestore 查询链

转载 作者:行者123 更新时间:2023-12-02 21:21:33 25 4
gpt4 key购买 nike

假设我需要根据 Promise 中收到的主题集合查询 Firestore:

const subjects: string[] = await getSubjects(); //response: ['Math', 'Science', 'History'];

由于我不知道在任何给定时间 Promise 中可能会返回多少个主题,因此我将如何动态生成下面的链以便我可以正确查询 Firestore?

ref.where('subject[subjects[0].toLowerCase()]', '==' , true)
.where('subject[subjects[1].toLowerCase()]', '==' , true)
.where('subject[subjects[2].toLowerCase()]', '==' , true);

返回的主题越多,需要生成的 .where() 方法就越多。

最佳答案

创建查询遵循构建器模式:当您调用 where 时它返回 Query关于Query您可以调用where再次。

因此,如果您有一组主题并想要创建这些主题的查询,您可以执行以下操作:

var query = firebase.firestore().collection("bla");
['Math', 'Science', 'History'].forEach((subject) => {
query = query.where(`subject[${subject}.toLowerCase()]'`, '==' , true);
})
query.get()....
<小时/>

请注意,Firestore 现在支持 array-contains-any运算符,它对于这些类型的操作具有更好的扩展性,并且可以同时处理多达 10 个主题。

要使用此功能,您的文档需要包含一个数组 subjects ,例如:

subjects: ['Math', 'Biology']

然后你可以用以下方式查询它:

var query = firebase.firestore().collection("bla")
.where('subjects', 'array-contains-any', ['Math', 'Science', 'History']);
query.get()...

关于javascript - 如何基于 Promise 的动态响应构建 Firestore 查询链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60832639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com