Firestore, где запрос с параметром не работает - PullRequest
1 голос
/ 07 марта 2019

У меня запрос, который не работает так, как я ожидаю.У меня есть коллекция игр, в которой есть несколько документов.Каждый документ имеет массив hiScores, который состоит из результатов этого раунда.Я хотел бы запросить все игры для конкретного игрока, например:

.where('hiScores.playerName', '==', 'David Lamm')

Это ничего не возвращает.У меня нет проблем при запросе переменной верхнего уровня в документе.Что я сделал не так?

База данных: db

db.collection('games')
  .where('hiScores.playerName', '==', 'David Lamm')
  .get()
  .then(function(querySnapshot) {
    console.log('Davids games:')

    querySnapshot.forEach(function(doc) {
      console.log(doc.id, " => ", doc.data());
    });
  })
  .catch(function(error) {
    console.log("Error getting documents: ", error);
  }
);

Ответы [ 2 ]

0 голосов
/ 07 марта 2019

Как указал Дуг, в настоящее время это невозможно в пожарном депо.

Вы можете создать массив строк верхнего уровня в каждой игре с именем playerNames []. Затем используйте условие where для playerNames с array_contains.

0 голосов
/ 07 марта 2019

Проблема в том, что поле hiScores является массивом, а не объектом.Вы можете сказать, что это массив, потому что первый непосредственный элемент массива на скриншоте имеет индекс 0. Вы пытаетесь запросить hiScores, как если бы это был один объект с единственным свойством с именем playerName.

Firestore hasn '• Поддержка запросов свойств объекта в полях массива.Если у вас есть поле массива, вы можете запрашивать только те документы, в которых весь элемент присутствует в массиве (запрос arrayContains ).

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