Вот моя текущая структура базы данных:
- usersGroups
- group1
- user1: true
- user2: true
- user3: true
- users
- user1
- name: 'Bob'
- group: group1
- user2
- name: 'Carl'
- group: group2
- user3
- name: 'Peter'
- group: group3
Чтобы определить имена пользователей, принадлежащих к group1
, я сейчас выполняю этот запрос:
const groupUserSnap = firebase.database().ref('usersGroups/group1').once('value');
let userPromises = [];
groupUserSnap.forEach((snap) => {
userPromises.push(
firebase.database().ref(`users/${snap.key}`).once('value')
);
});
// Wait until we have resolved promises for each user key
const userSnaps = await Promise.all(userPromises);
userSnaps.forEach((userSnap) => {
const user = userSnap.val();
console.log(`User's name is ${user.name}`);
});
Этот запрос извлекает все ключи пользователей, принадлежащих к соответствующей группе, и затем просматривает каждый из них, чтобы получить полные пользовательские значения.
Недавно мы добавили ключ group
также к каждому пользователю (как показано на приведенной выше структуре), чтобы мы могли легко идентифицировать группу, к которой принадлежит пользователь, без необходимости запрашивать userGroups
.
Теперь, когда ключ group
присутствует в user
, мы можем вместо этого выполнить этот запрос для получения пользователей, принадлежащих к группе:
firebase.database().ref('users').orderByChild('group').equalTo('group1').once('child_added');
У меня вопрос: делает ли этот запрос данные usersGroups
избыточными или я должен продолжать получать пользователей групп, как я это делал в предыдущем примере, для целей скорости?