MongoDB聚合 互动版

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

网页分类

我们有这样一个网站,用户可以在其上提交他们喜爱的链接url,比如汇智网(http://www.hubwiz.com),并且提交者可以为这个url添加一些标签,作为主题,其他用户可以为这条信息打分。我们有一个集合,收集了这些信息,然后我们需要看看哪种主题最为热门,热门程度由最新打分日期和所给分数共同决定。

首先建立一个map函数,发出(emit)标签和一个基于流行度和新旧程度的值。

> map = function(){  
...     for(var i in this.tags){  
...         var recency = 1/(new Date() - this.date);  
...         var score = recency * this.score;  
...         emit(this.tags[i], {"urls":[this.url], "score":this.score});  
...     }  
... };

现在就化简同一个标签的所有值,以得到这个标签的分数:

> reduce = function(key, emits) {  
...     var total = {"urls":[], "score":0};  
...     for(var i in emits) {  
...         emits[i].urls.forEach(function(url) {  
...             total.urls.push(url);  
...         });  
...         total.score += emits[i].score;  
...     }  
...     return total;  
... };