Как я могу запросить несколько полей на одной карте данных в Firestore? - PullRequest
0 голосов
/ 21 января 2019

Я создаю приложение, используя React + Redux + Firebase. В коллекции пользователей Firestore у меня есть несколько полей, включая язык, тему в качестве данных карты. Так, например,

// language that user can speak
language = {
  english: true
}
// subjects that the user can teach
subject = {
  math: true
  science: true
}

В основном приложении пользователь может искать других пользователей, отфильтровывая темы и языки. Например, пользователь может искать других пользователей, которые могут преподавать «математику» и «естествознание», используя «английский» язык.

И я борюсь с фильтрацией нескольких полей в данных карты. Я мог бы запросить на поле, выполнив ref.where('subject.${val}', '==' , true). Но есть ли способ сделать запрос по нескольким полям, чтобы получить документ, который содержит хэш темы по любому количеству объектов?

Я пытался поместить данные в массив, но в настоящее время членство в массиве Firebase поддерживает фильтрацию только одного элемента в массиве. Так что я думаю, это хорошее начало с хранения в хэш-карте. Любое предложение?

1 Ответ

0 голосов
/ 21 января 2019

Я пытался поместить данные в массив, но в настоящее время членство в массиве Firebase поддерживает фильтрацию только одного элемента в массиве.

Вы правы, вы можете фильтровать свои элементы только по одномуэлемент, который существует в массиве.Если вы объедините несколько вызовов функций, вы получите ошибку, похожую на эту:

Invalid Query.Запросы поддерживают только наличие одного фильтра, содержащего массив.

И чтобы ответить на ваш вопрос:

Но есть ли способ сделать запрос по нескольким полям, чтобы получить документ, которыйсодержит хэш для любого заданного числа объектов?

К сожалению, в Firestore нет подстановочных знаков.Вы должны идентифицировать имена свойств ваших документов по их точному имени.

Если вы хотите ограничить результаты путем фильтрации по нескольким свойствам, вам нужно объединить функции where(), как в следующем примере:

ref.where('subject.math', '==' , true)
    .where('subject.science', '==' , true)
    .where('language.english', '==' , true)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...