Как вы получаете всех детей определенного ref в firebase в объект? - PullRequest
0 голосов
/ 28 октября 2018

Вот моя структура Firebase.

enter image description here

Я хочу вернуть все обратно, вот так.

 {
"users": {
    "EFo7BemCuWVFyGYwk0CiTHR5fDB2": {
        "profile": {
            "-LMUD--2APhiSLkEtVbM": {
                "profileName": "bob",
                "profilePic": "https://scontent-iad3-1.xx.fbcdn.net/v/t1.0-1/c27.0.160.160/p160x160/205110_1018814483408_6876_n.jpg?_nc_cat=0&oh=2e40387a728c2f8c8d04b3299601be7e&oe=5C18FC6D",
                "score": 73,
                "teamName": "lzs"
            }
        },
        "team": {
            "-LPpWX5o8kmfCKUZBoYy": {
                "competitorKey": "-LNb6AEdyBSmeooeDhT0"
            },
            "-LPpWX_SMWHWsKauutVC": {
                "competitorKey": "-LNb42VDA4ZjW2EeVLLd"
            }
        }
    },
    "FIXBObMxXoOzFE7hsb4wHl8esfe2": {
        "profile": {
            "-LPqBizyqR-jEAsawYO7": {
                "profileName": "steve",
                "profilePic": "http://www.cricearena.com/images/rough_riders_new_medium_logo-u2182.png",
                "score": 43,
                "teamName": "twitterRangers4"
            }
        },
        "team": {
            "-LPqX9ncuK09WvnT3SIk": {
                "competitorKey": "-LNb6AEdyBSmeooeDhT0"
            }
        }
    }
  }
 }

Все, что я получаю, это ключи пользователей.

Мое избыточное действие -

export function loadLeague() {
 return dispatch => {
leagueFireDB.path = `users/`;
leagueFireDB.subscribe(dispatch);
 };
}

Моя функция fb db высокого уровня.

    subscribe(emit) {
let ref = firebaseDb.ref(this._path);
let initialized = false;
let list = [];

ref.once('value', () => {
  initialized = true;
  console.log("ONCE::",this._actions)
  emit(this._actions.onLoad(list));
});

ref.on('child_added', snapshot => {
  if (initialized) {
    emit(this._actions.onAdd(this.unwrapSnapshot(snapshot)));
  }
  else {
    list.push(this.unwrapSnapshot(snapshot));
  }
});

ref.on('child_changed', snapshot => {
  emit(this._actions.onChange(this.unwrapSnapshot(snapshot)));
});

ref.on('child_removed', snapshot => {
  console.log("REMOVE2::",snapshot)
  emit(this._actions.onRemove(this.unwrapSnapshot(snapshot)));
});

this._unsubscribe = () => ref.off();
}

Таким образом, очевидно, что он попадает на узел 'users' в БД, захватывает эти ключи там.Он не пересекает и не возвращает все, что является потомком рефери (или, я думаю, внуков и т. Д.).Я ищу всех детей из ссылки «Пользователи» в БД, но я искал вокруг, не нашел ничего, что могло бы сделать это.Я реагирую на избыточную пожарную базу.Это оно.Нет API / промежуточного программного обеспечения.

1 Ответ

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

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

 subscribeChild(emit) {
   let ref = firebaseDb.ref(this._path);
   ref.once('value', snapshot => {
   emit(this._actions.onLoad(this.unwrapSnapshot(snapshot)));
   });
 }

вот развертка, которая у меня есть.

 unwrapSnapshot(snapshot) {
   let attrs = snapshot.val();
   attrs.key = snapshot.key;
   return new this._modelClass(attrs);
 }

Мой запрос действия загрузки вызывал высокоуровневый вызов базы данных ref.once, но я не развернул там снимок.Поэтому я создал еще один эмиттер подписки с именем subscribeChild только для этого запроса на загрузку и поместил unwrapSnapShot в возвращаемый емит.Конечно, весь объект содержит все дочерние ссылки и данные значения ключа.Теперь я должен выяснить, как передать объект данных.:)

Я просто подталкиваю свой путь через эту RTDB-систему, поэтому, если у кого-то есть комментарии или если я действительно делаю это неправильно, пожалуйста, прокомментируйте, я обновлю или приму лучшие ответы соответственно.

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