首页 > 解决方案 > 如何使用 mapreduce 计算 MongoDB 中的相同值?

问题描述

我是 MongoDB 新手,正在尝试学习如何使用 mapreduce 来计算具有相同值的条目。这是我试图学习的示例模式:

{
    "id" : ObjectId("5913et2s059f950g9b799867"),
    "name" : "Sam’s Hotdog Stand",
    "country" : "USA",
    "location:" {
        "longitude" : 104.9903,
        "latitude" : 39.7392
    }
}

我正在尝试计算具有相同经度的餐馆数量(截断小数点)。

我有我的地图功能:

map = function() {
    emit({
        longitude: Math.floor(this.location.longitude),
        name: this.components.name
    }, {
        count : 1
    });
}

但我在减少部分有点迷失。我知道我需要比较每个值,但对如何做感到困惑。这是我到目前为止所拥有的,我了解如何计算每个值,但不检查经度是否相同:

reduce = function(key, values) {
    var total = 0;
    for (var i = 0; i < values.length; i++) {
        total += values[i].count;
    }
    return { count : total };
}

如何计算具有相同经度的每家餐厅,以及如何将它们与每个经度分开?

标签: mongodbmapreduce

解决方案


推荐阅读