Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.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
Javascript 减少误解。_Javascript_Mongodb_Mapreduce_Mongodb Query - Fatal编程技术网

Javascript 减少误解。

Javascript 减少误解。,javascript,mongodb,mapreduce,mongodb-query,Javascript,Mongodb,Mapreduce,Mongodb Query,我正在编写第二个mapReduce,从一个包含“活动”嵌套文档的集合中获得上周为每个用户播放的前十首歌曲,该文档包含歌曲id、计数器和日期数组。计数器表示歌曲的“播放时间” 我尝试使用mapReduce,我能够完成这项任务,并且只使用“map”输出所需的结果,而不需要减少发出的值。这是我使用的错误方法吗?这样做的最佳方法是什么 以下是地图功能: 您不应该需要reduce功能。根据输入数据,这是不必要的,我会解释原因 为了以简化的方式调用,在MapReduce中,mapper函数接受输入并按键将其

我正在编写第二个mapReduce,从一个包含“活动”嵌套文档的集合中获得上周为每个用户播放的前十首歌曲,该文档包含歌曲id、计数器和日期数组。计数器表示歌曲的“播放时间”

我尝试使用mapReduce,我能够完成这项任务,并且只使用“map”输出所需的结果,而不需要减少发出的值。这是我使用的错误方法吗?这样做的最佳方法是什么

以下是地图功能:
您不应该需要
reduce
功能。根据输入数据,这是不必要的,我会解释原因

为了以简化的方式调用,在MapReduce中,mapper函数接受输入并按键将其拆分,然后将
(键,值)
对传递给reducer。然后,减速机将
(键,[值列表])
对聚合为一些有用的输出

在您的例子中,
键是用户ID,值是他们听过的前10首歌曲。按照数据布局的方式,它已经组织成了
(键,[值列表])
对。您已经拥有一个键,该键后面是与其关联的每个值的列表。用户ID与他们刚听过的每首歌曲一起列出,因此无需减少


基本上,
reduce
步骤将把每个
(用户ID,歌曲)
对组合成一个用户歌曲列表。但这已经完成了。这是数据中固有的。因此,在本例中,映射器是完成本例所需功能的唯一必要功能。

为了帮助我们理解手头的问题,您能否发布一个示例文档以及MR的结果?这是一个示例文档,最重要的部分是嵌套活动文档。
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);
    }
}
var reduce = function(key, values) {};