0

我想在 youtube 中实现一个功能,您可以在其中知道您看过哪些视频。

我必须解决方案:

  • 将播放的视频存储在本地存储中,并使用此数据更新用户界面。(如果数据还没有在 locastorage 中并且用户已经观看了很多视频,这将需要在开始时进行高数据负载)
  • 将数据存储在一个表中,当然,在得到查询结果后,获取与当前用户相关的每个视频信息。在我看来,这种方式需要太多的查询。

你可能会建议什么?

4

1 回答 1

1

将数据存储在一个表中,当然,在得到查询结果后,获取与当前用户相关的每个视频信息。在我看来,这种方式需要太多的查询。

我看不出这需要很多查询,您只需要两个:一个“常规”,一个使用$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。

于 2014-04-14T09:30:46.247 回答