Я - Front-End Developer и впервые использую Firebase для создания приложения.Я прочитал некоторую документацию / статьи и посмотрел это интересное видео о внешних ключах (отношения многих ко многим): https://www.youtube.com/watch?v=ran_Ylug7AE&list=PLl-K7zZEsYLlP-k-RKFa7RyNPa9_wCH2s&index=2.
Я пытаюсь применить этот подход для извлечения событий для конкретного пользователя.В идеале я хочу получить эту информацию, не запрашивая / не оплачивая слишком много данных.Во-первых, вот как я настраивал следующую структуру базы данных (см. Видео):
{
users:
"abc": {
firstname: "Maxime",
...
},
"def": {
firstname: "John",
...
},
},
events: {
"eventAbc-": {
title: "Some great event",
...
},
"eventDef": {
title: "Another great event",
...
}
},
eventAttendees: {
"eventAbc": {
abc: true,
def: true,
},
"eventDef": {
abc: true,
}
}
}
Чтобы получить события пользователя, у меня есть следующее, что на самом деле работает:
getEvents(userId) {
const self = this;
const query = firebase.firestore().collection('eventAttendees');
var promises = [];
query.onSnapshot(function(snap) {
snap.docs.forEach(doc => {
const data = doc.data();
if (data[userId]) {
// user has been invited to this event
promises.push(self.getEvent(doc.id));
}
});
Promise.all(promises).then((results) => {
console.log("All events");
console.log(results);
});
});
}
getEvent(eventId) {
return new Promise((resolve) => {
const query = firebase.firestore()
.collection('events')
.doc(eventId);
query.onSnapshot(function(snap) {
resolve(snap.data());
});
});
}
getEvents('abc');
Вопросы
- Я не думаю / не знаю, есть ли у меня правильный и оптимизированный подход?Любая документация / Github проект, который я должен рассмотреть в качестве ссылки?
- Что произойдет, если abc был приглашен на 1 миллион событий?Я чувствую, я зацикливаюсь и нужно обрабатывать нумерацию страниц из коробки.Есть ли лучший способ?
- Предположим, что каждое событие имеет много информации (подробности).Однако на главной странице мне просто нужно отобразить основную информацию (название события, дата события).Где я должен хранить это, чтобы не загружать много информации.
Надеюсь, найдется время, чтобы ответить на мои вопросы. Спасибо .