Это действительно сложный, но распространенный случай, я бы рекомендовал установить структуру данных, подобную:
{
"subscriptions" {
javascript: { ... },
python: { ... },
java: { ... }
},
"users": {
1: {
subscribed_to: ['javascript', 'python']
}
}
}
Очень важно, чтобы на вашем subscribed_to
реквизите вы использовали имя doc
, потому что именно эта часть позволяет вам запрашивать их (документы).
большая проблема, как мне запросить эти данные? У меня нет объединений!
Дело 1:
Предполагая, что у вас есть пользовательские данные, когда вы применяете нагрузку ...
const fetchDocs = async (collection, docs) => {
const fetchs = docs.map(id => collection.doc(id).get())
const responses = await Promise.all(fetchs)
return responses.map(r => r.data())
}
const userSubscriptions = ['javascript', 'python']
const mySubscriptions = await fetchDocs(`subscriptions`, userSubscriptions)
За кулисами SDK сгруппирует все запросы и приложит все усилия, чтобы доставить их вместе. Это работает хорошо, я на 99% уверен, что вам все равно придется платить за каждый запрос индивидуально каждый раз, когда пользователь входит в систему.
Дело 2:
Создайте коллекцию панели мониторинга вида и предварительно рассчитайте dashboard
за сценой. Этот подход включает облачные функции для прослушивания или изменения пользовательских изменений (и, возможно, подписок) и копирования каждого отдельного документа в другую коллекцию. скажем subscriptions_per_users
. Это более сложный подход, мне потребуется больше времени для объяснения, но если у вас большое приложение, где важны затраты, и если пользователь собирается подписаться на множество вещей, то вы можете изучить его.
Источник: мой собственный опыт ... немного гугла также может помочь, кажется, есть много мнений по этому поводу, найдите то, что работает лучше для вас.