javascript - 我有一个要搜索 Cloud Firestore 的运动列表(数组)。但是,数组的大小会有所不同
问题描述
我有一系列运动,我想用它来查询 Cloud Firestore,但数组的大小可能不同。有时会查询一项运动,有时会查询两项运动,等等。它就像数组包含,但相反。我有一个数组,我想看看这些项目是否在数据库中。我知道我可以链接 .where(),但是如何根据数组中的项目数动态更改它?
我将如何在 Firestore 查询中实现它?我会将运动数组映射到 where(sport '==' SPORT_NAME_HERE) 吗?
以下是针对单个运动(字符串)的查询:
let sportsQuery = await database.collection('sports')
.where('sport', '==', 'SPORT_NAME_HERE')
.orderBy('sport_team')
.limit(7)
这就是我的想法。完全不确定是否允许使用 .then ,但到目前为止这是我的解决方案: let sports = ['golf', 'tennis', 'basketball'];
let sportsQuery = await database.collection('sports')
.then(
sports.map(sport => {
.where('sport', '==', `${sport}`)
})
)
.orderBy('sport_team')
.limit(7)
解决方案
您应该按照以下几行组合几个查询。由于我们想要并行执行可变数量的查询,我们使用Promise.all()。
var database = firebase.firestore();
const sports = ['golf', 'tennis', 'basketball'];
const promises = [];
sports.forEach(function(element) {
const sportsQuery = database
.collection('sports')
.where('sport', '==', element)
.orderBy('sport_team')
.limit(7)
.get();
promises.push(sportsQuery);
});
Promise.all(promises).then(function(results) {
//results is an array of QuerySnapshots, since the get() method returns a QuerySnapshot
results.forEach(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
console.log(doc.id, ' => ', doc.data());
//It's up to you to possibly populate an array here, that you may sort later on
});
});
});
推荐阅读
- android - Jenkins 模块依赖
- python - 如何仅在特定位置使用 scipy 执行卷积?
- dart - Isolate.spawnUri 当前在消息中包含 SendPort 时会导致错误?
- python - dataset.repeat() 在 TensorFlow 中不起作用
- javascript - 仅将许多对象插入到一个画布中
- api - JMSSerializer Bundle - 循环引用错误(仅在 Prod Azure 环境中) - Symfony4/Doctrine2 REST API
- linux - 块设备(emmc 分区)是否有文件结束标记?
- sql - 尝试创建二进制标志时 SQL case 语句出错?
- angularjs - AngularJS,TypeScript,组件架构 [$injector:unpr] 未知提供者
- angular - 角度示意图。树转换未执行