У меня есть список видов спорта (массив), который я хочу найти Cloud Firestore.Тем не менее, массив будет отличаться по размеру - PullRequest
0 голосов
/ 21 мая 2019

У меня есть массив видов спорта, с которыми я хочу запросить облачное хранилище, но массив может отличаться по размеру. Иногда будет запрос для одного вида спорта, иногда для двух видов спорта и т. Д. Это будет похоже на массив, но в обратном порядке. У меня есть массив, и я хочу посмотреть, есть ли какие-либо из этих элементов в базе данных. Я знаю, что могу создать цепочку .where (), но как мне динамически изменить это в соответствии с количеством элементов в массиве?

Как мне реализовать это в запросе Firestore? Могу ли я отобразить массив видов спорта куда (sport '==' SPORT_NAME_HERE)?

Вот как будет выглядеть запрос для одного вида спорта (строка):

let sportsQuery = await database.collection('sports')
                        .where('sport', '==', 'SPORT_NAME_HERE')
                        .orderBy('sport_team')
                        .limit(7)

Вот то, о чем я думал. Совершенно не уверен, что .then разрешен, но это было мое решение до сих пор: let sports = ['гольф', 'теннис', 'баскетбол'];

 let sportsQuery = await database.collection('sports')
     .then(
       sports.map(sport => {
         .where('sport', '==', `${sport}`)
       })
     )
     .orderBy('sport_team')
     .limit(7)

1 Ответ

1 голос
/ 22 мая 2019

Вы должны объединить несколько запросов в следующих строках.Поскольку мы хотим выполнять переменное число запросов параллельно, мы используем 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
      });
    });
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...