如何使10个项目的高性能选择或多或少,然后知道当前用户何时已经在mongodb中查看了该项目?[关闭]

StackOverflow https://stackoverflow.com//questions/23047119

我想在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 是对象id等单调键。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top