我正在使用mongodb存储图像元数据和S3网址。我想要 显示一段时间内观看次数最多的项目,例如“今天”,“本周”, 就像youtube对视频一样。我应该如何存储“观点” mongodb查询那种数据?
我正在考虑创建一个视图集合并将每个“视图”存储为 包含日期信息的文档,并且还存储视图计数 单个图像文档,用于快速检索视图计数。这些 每个综合浏览量都会更新两个。我假设MapReduce会得到 从那里完成的工作,但我无法想象它。
答案 0 :(得分:3)
除非您需要,否则请勿为每个视图创建单独的文档。
您可以删除日期中不重要的部分,仅存储日期+小时或仅存储日期,并使用$inc
添加新的“视图”:
db.hits.update(
{"item": "image0001", "date": ..dayordayandhour..},
{"$inc": { "hits": 1}},
true) //upsert
对于聚合,您可以使用group
,mapreduce对此更为过分。
注意:如果您不需要确切的数字,您可以按小时进行汇总,然后更新“今天”/“本周”计数器(您可以使用此方法管理多个计数器)方法!)在每个文档上,以便您可以根据视图计数器进行快速查找和排序。