Получить значения из коллекции Cloud Firestore на основе фильтрующего запроса с несколькими .where - PullRequest
0 голосов
/ 01 мая 2020

enter image description here

Из коллекции «совпадения», отфильтрованной по «league_id», если равен 468, то если массив совпадений в любой позиции в массиве jornada содержит «Пт Май 01 2020».

Я пробовал это, но без радости. Я верю, что, если есть способ объединить 2-го и 3-го, где в одном будет трюк ....

let query = await db.firestore().collection("matches");

query = await query.where("league_id", "==", "468");
console.log(query);

query.where("matches", "array-contains", "jornada"); //2nd
query
  .where("jornada", "array-contains", today)//3th
  .onSnapshot(function(querySnapshot) {
    console.log(querySnapshot);

    var cities = [];
    querySnapshot.forEach(function(doc) {

      console.log(doc.data());


    });
  });

1 Ответ

0 голосов
/ 02 мая 2020

Первый выполненный вами запрос:

query = await query.where("league_id", "==", "468");

Будет отлично работать, поскольку у вас есть свойство league_id, которое содержит значение 468, однако добавляется следующий вызов:

query.where("matches", "array-contains", "jornada");

Это не будет работать, потому что вы указываете Firestore возвращать все документы, которые содержат в массиве matches строку jornada. Это невозможно, поскольку в массиве matches вы не храните строковые значения. matches на самом деле является массивом, который содержит объекты, объекты, которые в терминах содержат некоторые свойства типа array. Такие запросы на самом деле не поддерживаются Firestore.

Вместо этого вы можете создать другое свойство массива в вашем документе, которое фактически будет содержать строковые значения. Добавьте в этот массив точные значения String, по которым вы хотите фильтровать данные, и второй запрос тоже будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...