我有一个体育运动数组,我想用它查询云存储,但是数组的大小可以不同。有时会查询1个运动,其他时间查询两个运动,依此类推。这就像包含数组,但相反。我有一个数组,我想查看数据库中是否有那些项。我知道我可以链接.where(),但是如何根据数组中的项目数动态地更改它呢?
我将如何在Firestore查询中实现它?我可以将一系列运动映射到哪里(运动'=='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)
答案 0 :(得分:1)
您应该按照以下几行结合几个查询。由于我们要并行执行可变数量的查询,因此我们使用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
});
});
});