我有一个要搜索Cloud Firestore的运动(数组)列表。但是,数组大小会有所不同

时间:2019-05-21 08:01:27

标签: javascript firebase google-cloud-firestore

我有一个体育运动数组,我想用它查询云存储,但是数组的大小可以不同。有时会查询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)

1 个答案:

答案 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
      });
    });
  });