Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何进行10个项目的高性能选择,然后知道当前用户何时已经在mongodb中查看了该项目?_Mongodb_User Interface_Personalization - Fatal编程技术网

如何进行10个项目的高性能选择,然后知道当前用户何时已经在mongodb中查看了该项目?

如何进行10个项目的高性能选择,然后知道当前用户何时已经在mongodb中查看了该项目?,mongodb,user-interface,personalization,Mongodb,User Interface,Personalization,我想在youtube上实现一个功能,你可以知道你看过哪些视频 我必须: 将播放的视频存储在本地存储器中,并使用此数据更新用户界面。(如果数据不在locastorage中且用户观看了大量视频,则启动时需要高数据负载) 当然,将数据存储在一个表中,在获得查询结果后,获取与当前用户相关的每个视频信息。在我看来,这样做需要太多的质疑 你有什么建议 当然,将数据存储在一个表中,在获得查询结果后,获取与当前用户相关的每个视频信息。在我看来,这样做需要太多的质疑 我不认为这需要很多查询,您只需要两个:一个

我想在youtube上实现一个功能,你可以知道你看过哪些视频

我必须:

  • 将播放的视频存储在本地存储器中,并使用此数据更新用户界面。(如果数据不在locastorage中且用户观看了大量视频,则启动时需要高数据负载)
  • 当然,将数据存储在一个表中,在获得查询结果后,获取与当前用户相关的每个视频信息。在我看来,这样做需要太多的质疑
你有什么建议

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

我不认为这需要很多查询,您只需要两个:一个是“常规”,一个是使用:

假设一个集合
videos{u id,title,description,uploader,date,…}
和一个集合
userRecentVideos{userId,videoid:[1,912,234234,…]}

这将有助于:

var recent = db.userRecentVideos.find({"userId" : myUserId})[0].videoIds;
var videoInfo = db.videos.find({"_id" : {$in : recent}});
或者,您可以公开一个接受ID列表并返回视频元信息列表的
getVideoInfos
HTTP端点

videoid
应该有一个固定的大小,并且应该初始化为所有0或其他值,这样数组就不会一直增长

如果确实要存储整个历史记录,最好不要使用嵌入式数组,而是将其作为链接器集合,如下所示:

videoHistory { _id, userId, videoId }

{u id,userId}
上放置一个索引,您可以为每个用户获取n个最近播放的视频,假设
\u id
是一个单调的键,例如对象id。

我建议实现一个选项,尝试一下,实现第二个并进行比较。它们其实并不难实现,所以这里没有必要猜测。我在寻找第三个……在你的第一句话中,“VideoID应该有一个固定的大小,并且应该初始化为所有0或其他值,这样数组就不会一直增长。”因为它会有可变数量的视频,所以不起作用。但我只能存储最后1000个视频,例如,我不知道,这是太多还是不好?这个表演怎么样?。。进一步说,“如果你真的想存储整个历史,最好不要使用嵌入式数组,而是像这样将其作为链接器集合”。不,这对性能没有太大影响。只需确保您正在从服务器查询合理数量的数据,并使用
\u id
执行分页。在这种情况下,“使用执行分页”的含义是什么?如果您的集合越来越大,不要使用
跳过
,而是在
\u id
上执行
$gt
(这样做必须是单调的)。只有当你的页面超过数千个文档时,这才是一个问题。但问题是集合不是按id排序,而是按内部排名系统排序。。。