Как вернуть объединить данные с разными таблицами в функцию al oop с базой данных Firebase Realtime - PullRequest
0 голосов
/ 29 февраля 2020

Вот моя структура данных в базе данных реального времени firebase.

[

И я хочу создать API для возврата данных в сочетании с toolbox toolboxUsers toolboxTools для каждой панели инструментов.

Вот мой код. Я пробовал много способов, но никто не работает хорошо.
У меня также есть некоторые ссылки, такие как https://youtube.com/watch?v=Idu9EJPSxiY и , как сделать соединения в таблицах Firebase

путь 1

  toolboxesRef.once('value', snapshot => {
    var toolboxes = []
    var toolboxKeys = Object.keys(snapshot.val());
    for(var toolboxKey of toolboxKeys) {
      var toolboxPromise = toolboxesRef.child(toolboxKey).once('value');
      var toolboxUsersPromise = toolboxUsersRef.child(toolboxKey).once('value');
      var toolboxToolsPromise = toolboxToolsRef.child(toolboxKey).once('value');
      Promise.all([toolboxPromise, toolboxUsersPromise, toolboxToolsPromise])
      .then(snapshot => {
        var toolbox = [];
        snapshot.forEach(childSnapshot => {
          toolbox.push(childSnapshot.val());
        });
        toolboxes.push(toolbox);
      })
    }
    res.json(toolboxes);
  })

путь 2

  toolboxesRef.once('value', snapshot => {
    var promises = [];
    snapshot.forEach(childSnapshot => {
      var childKey = childSnapshot.key;
      var toolboxPromise = toolboxesRef.child(childKey).once('value');
      var toolboxUsersPromise = toolboxUsersRef.child(childKey).once('value');
      var toolboxToolsPromise = toolboxToolsRef.child(childKey).once('value');
      promises.push(toolboxPromise);
      promises.push(toolboxUsersPromise);
      promises.push(toolboxToolsPromise);
    });
    Promise.all(promises).then(snapshots => {
      var toolbox = [];
      snapshots.forEach(childSnapshot => {
        toolbox.push(childSnapshot.val());
      });
      res.json(toolbox);
  });

Ожидаемый результат - получить полные данные для каждого набора инструментов

enter image description here

Но я могу получить только данные одного набора инструментов вместо данных для каждого набора инструментов, потому что кажется, что для l oop будет выполняться первым.

Может кто-нибудь дать мне несколько советов? Или это неправильная структура данных?

1 Ответ

0 голосов
/ 29 февраля 2020

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

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