Вложенный запрос Firebase - PullRequest
       2

Вложенный запрос Firebase

0 голосов
/ 09 февраля 2019

Я пытаюсь выполнить вложенный запрос Firebase для системы очередей, которую я строю.Цель состоит в том, чтобы получить список «станций», а затем запросить «проекты».которые соответствуют данной «станции».затем отобразите данные так, чтобы мои «станции» были перечислены с «проектами», которые соответствуют этой станции, перечислены под этой станцией.Моя структура данных следующая:

projects
   -LYFLi59ZFTcHHNGEl4Y
   -LYFNmlW_fDOxOGep1VT
        SKU: "66534"
        buyerEmail: "guy@internet.com"
        comments: "comment"
        createdAt: 1549684385662
        queue: 1
        station: "Lathe"
        timeTest: "Fri Feb 08 2019"
stations
   -LYCB7awMyE7gxRKlojN
        StationtName: "Lathe"
   -LYCCBjC4JT9rZlgJSiL
   -LYCCD0J6VqafpRL8Mlf

В этом случае я ищу продукты, которые равны «Токарному станку» и отображаю их в очереди «Токарный станок».

Прямо сейчас у меня есть список, который возвращает все мои станции:

this.stationRef = firebase.database().ref('stations/');
        this.stationRef.on('value', resp => {
          this.stations = [];
          this.stations = snapshotToArray(resp);

        }); 

Затем у меня есть еще одна ссылка, которая возвращает все проекты, упорядоченные станциями и равные значению станции в массиве станций.

    this.projectRef = firebase.database().ref('projects/')
       .orderByChild('station')
       .equalTo(------this.Is My Problem-----);  ///// Looking for this.stationId //// 
          this.projectRef.on('value', resp => {
            this.projects = [];
            this.projects = snapshotToArray(resp);

        });

Я использую следующее, чтобы вернуть значение станции, которую я хочу передать в projectRef, но я не могу получить переменную вне цикла, и я не могу использовать projectRef внутри цикла..

    const snapshotToArray = snapshot => {
              let returnArr = [];

              snapshot.forEach(childSnapshot => {
                  let item = childSnapshot.val();
                  item.key = childSnapshot.key;
                  this.stationId = childSnapshot.val().StationtName;
           <--------------------------------------->
                     this.stationId is the 
                     variable I want to pass
                     into the projectRef
           <---------------------------------------->
                  returnArr.push(item);

            });
              return returnArr;
            } 

Заранее спасибо за помощь!И я пропускаю какие-либо лучшие практики или неправильно решаю проблему?

Еще раз спасибо ..

1 Ответ

0 голосов
/ 09 февраля 2019

Ядром Firebase является полное выравнивание структуры данных (NO-SQL).Но в то же время сложные запросы были основной проблемой FireBase, поэтому они просят нас использовать FireStore для сложных структур запросов.

Здесь, насколько я понимаю, вы хотите перечислить станции с подсписком своих продуктов.Лучший способ реализовать это с одной синхронизацией - это поместить массив проектов id / name в станции.Таким образом, вы слушаете только узел станции, и у него есть массив всех идентификаторов проектов, и вы просто показываете список станций, и используете массив, чтобы показать подсписок проектов, и просто нажимаете просто открыть детали проекта с этим идентификатором.

station- id- stationName products: {prod1, prod2, prod3}

Но если вы хотите показать всю информацию о продуктах на одном экране, просто загрузите все продукты (если их нет в миллионах, перейдите в FireStore.) и сохраните их.на карте, используя ключ и значение в качестве самого продукта и использовать его для отображения информации.Не делайте вложенные запросы в firebase, если вам действительно не нужно

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