我正在编写我的第二个 mapReduce,以便从包含“活动”嵌套文档的集合中获取上周为每个用户播放的前十首歌曲,该文档包含一组 song_id、计数器和日期。计数器表示歌曲的“播放次数”。
我尝试使用 mapReduce,我能够完成此任务并仅使用“map”输出所需的结果,而无需减少发出的值。这是我使用的错误方法吗?这样做的最佳方法是什么。
这是地图功能:
var map = function() {
user_top_songs = [];
user_songs = [];
limit = 10;
if(this.activities !== undefined){
key = {user_id:this.id};
for (var i=0; i < this.activities.songs.length; i++){
if (this.activities.songs !== undefined && this.activities.songs[i].date.getDate() > (new Date().getDate()-7))
user_songs.push([this.activities.songs[i].song_id, this.activities.songs[i].counter]);
}
if(user_songs.length !== 0){
user_songs.sort(function(a,b){return b[1]-a[1]});
if(user_songs.length < 10 )
limit = user_songs.length;
for(var j=0; j < limit; j++)
user_top_songs.push(user_songs[j]);
}
value = {songs:user_top_songs};
emit(key,value);
}
}
这是空的reduce方法:
var reduce = function(key, values) {};