我如何使用map-reduce与MongoDB和JS来获取它?

时间:2017-10-14 21:30:22

标签: javascript mongodb mapreduce

我是JS的新手,所以我因为缺乏知识而使用地图缩小和mongodb有一些大问题,我有这个名为 dailyAlerts 的集合:

{
        "_id" : 25,
        "title" : "Other… Title Test Polygon 2",
        "alertDescription" : "Other… Description Test Polygon 2",
        "alertDateTime" : 1507784400100,
        "alertLatitude" : 20.5774756,
        "alertLongitude" : -103.3795262,
        "alertType" : 9,
        "userName" : "Azgad",
        "photoLink" : "www.google.com",
        "videoLink" : "www.google.com",
        "__v" : 0
}{
        "_id" : 26,
        "title" : "Other… Title Test Polygon 4",
        "alertDescription" : "Other… Description Test Polygon 4",
        "alertDateTime" : 1507784400100,
        "alertLatitude" : 20.5774756,
        "alertLongitude" : -103.3795262,
        "alertType" : 5,
        "userName" : "Azgad",
        "photoLink" : "www.google.com",
        "videoLink" : "www.google.com",
        "__v" : 0
}   
{
        "_id" : 27,
        "title" : "Other… Title Test Polygon 6",
        "alertDescription" : "Other… Description Test Polygon 6",
        "alertDateTime" : 1507784400500,
        "alertLatitude" : 20.5774756,
        "alertLongitude" : -103.3795262,
        "alertType" : 1,
        "userName" : "Azgad",
        "photoLink" : "www.google.com",
        "videoLink" : "www.google.com",
        "__v" : 0
}

这里的重要字段是" alertType",我想使用map reduce为我提供基于alertType的所有警报的计数(可用值为1-9),如果没有文件,则其他为0找到那个alertType,我还需要向我展示处理所有文件的总数,以便将它们插入另一个集合中,如下所示:

{
        "_id" : 4,
        "dateRecord" : 3500,
        "type1Count" : 0,
        "type2Count" : 10,
        "type3Count" : 20,
        "type4Count" : 30,
        "type5Count" : 0,
        "type6Count" : 50,
        "type7Count" : 60,
        "type8Count" : 70,
        "type9Count" : 80,
        "totalCount" : 320,
} 

我非常感谢你对此的帮助。

1 个答案:

答案 0 :(得分:0)

我假设您的问题不是您所需输出中的前两个属性值。可以使用reduce收集计数:

var data = [{ "alertType" : 9 }, { "alertType" : 5 }, { "alertType" : 1 }];

var counts = data.reduce ( (counts, obj) => {
    counts[obj.alertType]++;
    return counts;
}, Array(10).fill(0) );

console.log(counts);
.as-console-wrapper { max-height: 100% !important; top: 0; }

这将返回一个数组,其中在索引 k ,您将找到alertType = k出现的次数。由于数组也有索引0,第一个值将始终为0.您当然可以将其转换为非数组对象或任何其他数据结构。