这确实是一个复杂但常见的情况,我建议设置一个类似的数据结构:
{
"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。这是一种更复杂的方法,我将需要更多时间来解释,但如果您有一个大型应用程序,其中成本很重要,并且如果用户要订阅很多东西,那么您可能需要对其进行调查。
资料来源:我自己的经验... google一下也能帮上忙,似乎有很多意见,找到最适合你的。