Отдельные запросы вместо нескольких, где пункт в Firestore - PullRequest
0 голосов
/ 28 октября 2018

Я хочу запросить сбор данных пожарной базы Firebase с двумя параметрами.

Коллекция: animal

"animals": {
   "1": {
      "animal1": "cat",
      "animal2": "dog",
      "animal3": "",
      "animal4": ""
   },
   "2": {
      "animal1": "dog",
      "animal2": "cat",
      "animal3": "",
      "animal4": ""
   },
   "3": {
      "animal1": "cat",
      "animal2": "bird",
      "animal3": "dog",
      "animal4": ""
   },
   "4": {
      "animal1": "wolf",
      "animal2": "dog",
      "animal3": "bird",
      "animal4": ""
   },
   "5": {
      "animal1": "turtle",
      "animal2": "dog",
      "animal3": "wolf",
      "animal4": "cat"
   },
   "6": {
      "animal1": "dog",
      "animal2": "wolf",
      "animal3": "turtle",
      "animal4": "bear"
   },
   "7": {
      "animal1": "spider",
      "animal2": "beatle",
      "animal3": "butterfly",
      "animal4": "Cat"
   }
}

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

Я не знаю, сколько отдельного запроса мне нужно?

let param1 = 'cat';
let param2 = 'dog';

let query1 = db.collection('animals').where('animal1', '==', param1);
let query2 = db.collection('animals').where('animal2', '==', param1);
let query3 = db.collection('animals').where('animal3', '==', param2);
let query4 = db.collection('animals').where('animal4', '==', param3);

1 Ответ

0 голосов
/ 28 октября 2018

Как вы заметили, «вы должны создать отдельный запрос для каждого условия ИЛИ и объединить результаты запроса в вашем приложении».Поскольку в вашей модели данных у вас есть 4 поля (от animal1 до animal4), вам нужно будет создать 4 запроса для каждого значения param, которое вы хотите проверить.

Так что в случае 2params, следующим образом:

let param1 = 'cat';
let param2 = 'dog';

вам нужно объединить результаты 2 * 4 запросов ....

Существует возможность уменьшить это число, если вы измените модель данныхи использовать массив для хранения значений animal.Затем вы можете воспользоваться оператором array_contains.

Предлагаемая модель данных:

"animals": {
   "1": {
      "animalArray": 
          [
             0: "cat",
             1: "dog"
          ] 
   },
   "2": {
      "animalArray": 
          [
             0: "turtle",
             1: "dog",
             2: "wolf",
             3: "bear",
          ]
   }
   .....
}

В нашем примере с двумя params вам потребуется только два запроса, как показано ниже:

let query1 = db.collection('animals').where("animalArray", "array-contains", param1);
let query2 = db.collection('animals').where("animalArray", "array-contains", param2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...