我想在 youtube 中实现一个功能,您可以在其中知道您看过哪些视频。
我必须解决方案:
- 将播放的视频存储在本地存储中,并使用此数据更新用户界面。(如果数据还没有在 locastorage 中并且用户已经观看了很多视频,这将需要在开始时进行高数据负载)
- 将数据存储在一个表中,当然,在得到查询结果后,获取与当前用户相关的每个视频信息。在我看来,这种方式需要太多的查询。
你可能会建议什么?
我想在 youtube 中实现一个功能,您可以在其中知道您看过哪些视频。
我必须解决方案:
你可能会建议什么?
将数据存储在一个表中,当然,在得到查询结果后,获取与当前用户相关的每个视频信息。在我看来,这种方式需要太多的查询。
我看不出这需要很多查询,您只需要两个:一个“常规”,一个使用$in
:
假设一个集合videos { _id, title, description, uploader, date, ... }
和一个集合userRecentVideos { userId, videoIds : [1, 912, 234234, ... ] }
,
这会做:
var recent = db.userRecentVideos.find({"userId" : myUserId})[0].videoIds;
var videoInfo = db.videos.find({"_id" : {$in : recent}});
或者,您可以公开一个getVideoInfos
接受 Id 列表并返回视频元信息列表的 HTTP 端点。
应该有一个固定的videoIds
大小,并且应该初始化为全 0 或其他东西,这样数组就不会一直增长。
如果您真的想存储整个历史记录,最好不要使用嵌入式数组,而是将其作为链接器集合,如下所示:
videoHistory { _id, userId, videoId }
在 上放一个索引{_id, userId}
,你可以得到每个用户最近播放的 n 个视频,假设_id
是一个单调的 key,比如一个 object id。