我如何使用带有 MongoDB 和 JS 的 map-reduce 来获得它?

How can I use map-reduce with MongoDB and JS to obtain this?

我是 JS 的新手,所以我在使用 map reduce 和 mongodb 时遇到了一些大问题,因为我缺乏知识,我有一个名为 dailyAlerts[=20= 的集合]:

{
        "_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,
} 

非常感谢你的帮助。

我假设您的问题与所需输出中的前两个 属性 值无关。可以使用 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; }

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