我想知道这是否可能,并且是否可以很好地解决我的问题。
我希望用户能够subscribe
观看内容。内容与id
..相关,例如:
'JavaScript': 1,
'C++': 2,
'Python': 3,
'Java': 4,
假设用户订阅了1
,3
和4
。
因此他们的用户json数据将显示为:
'subscribed_to': [1,3,4]
现在在我的消防站中,我有帖子。每个帖子都会分配一个content_id
(例如1-4),因此当我查询该用户订阅的内容时,我将如何尽可能有效地做到这一点?
答案 0 :(得分:3)
这确实是一个复杂但常见的情况,我建议设置类似以下的数据结构:
{
"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员工也可以提供帮助,对此似乎有很多意见,找到最适合您的方法。