MongoDB使用时间范围查询页面视图

时间:2011-07-08 18:11:21

标签: database-design mongodb node.js

我正在使用mongodb存储图像元数据和S3网址。我想要 显示一段时间内观看次数最多的项目,例如“今天”,“本周”, 就像youtube对视频一样。我应该如何存储“观点” mongodb查询那种数据?

我正在考虑创建一个视图集合并将每个“视图”存储为 包含日期信息的文档,并且还存储视图计数 单个图像文档,用于快速检索视图计数。这些 每个综合浏览量都会更新两个。我假设MapReduce会得到 从那里完成的工作,但我无法想象它。

1 个答案:

答案 0 :(得分:3)

除非您需要,否则请勿为每个视图创建单独的文档。

您可以删除日期中不重要的部分,仅存储日期+小时或仅存储日期,并使用$inc添加新的“视图”:

db.hits.update(
    {"item": "image0001", "date": ..dayordayandhour..},
    {"$inc": { "hits": 1}},
    true) //upsert

对于聚合,您可以使用group,mapreduce对此更为过分。

注意:如果您不需要确切的数字,您可以按小时进行汇总,然后更新“今天”/“本周”计数器(您可以使用此方法管理多个计数器)方法!)在每个文档上,以便您可以根据视图计数器进行快速查找和排序。