Обработка неопределенных значений для поиска в базе данных Firestore - PullRequest
0 голосов
/ 29 апреля 2018

У меня есть страница поиска с 10 возможными полями, но не каждое поле необходимо для поиска. Но как я могу построить запрос, чтобы он не смотрел на значения, которые не заполнены (и не определены)?

Я не могу написать оператор if в машинописном тексте (который я пробовал первым), потому что тогда мне придется написать более 10 различных возможных запросов, которые просто не кажутся очень эффективными.

Так, как я могу удалить неопределенные записи и повторно использовать тот же запрос?

Я действительно понятия не имею, как даже начать пробовать это, поэтому любая помощь очень ценится.

РЕДАКТИРОВАТЬ:

Экран поиска

Запрос:

this.itemsCollectionHouse = this.afs.collection<House>('houses', ref=> ref.where('garden', '==', true).orderBy('name'));

Итак, на скриншоте показан экран, на котором пользователь может вводить данные в полях поиска. Тогда запрос - это лишь малая часть того, что я хочу сделать, потому что я не знал, как поступить. Но мне нужно иметь возможность выполнять поисковый запрос, когда все поля введены, а также когда одно или несколько полей с экрана поиска пусты / не определены.

Например, если пользователь не выбрал garden и не был определен, как бы я мог выполнить запрос без этой переменной, но при этом искать поля, которые были заполнены?

1 Ответ

0 голосов
/ 14 июля 2018

Вы не разговариваете с Firebase, пока не нажмете кнопку отправки (против разговора с Firebase по событиям keyup и onchange). Итак, ваша задача на самом деле проста.

Если у вас нет веской причины не использовать JavaScript. Также используйте Firestore, так как он поддерживает составные запросы .

var myArray = [];
var whereString = "";
if(selectOne.value){
  myArray.push('"state", "==", ' + selectOne.value);
} 
if(selectTwo.value){
  myArray.push('"color", "==", ' + selectTwo.value);
} 
if(inputOne.value){
  myArray.push('"population", "<", ' + inputOne.value);
} 

for (var i = 0; i < myArray.length; i++) {
  whereString = whereString + ".where(myArray[i])"
}

myRef = firebase.firestore() + whereString
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...