V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐工具
RoboMongo
推荐书目
50 Tips and Tricks for MongoDB Developers
Related Blogs
Snail in a Turtleneck
lukefan
V2EX  ›  MongoDB

MongoDB 的 MapReduce 计算结果不正确

  •  
  •   lukefan · 2014-02-07 23:32:36 +08:00 · 4028 次点击
    这是一个创建于 3730 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我有一个数据库,里面有九百多条资源信息。并对这九百多条信息,标记了两千多个标签。
    于是写了一个map_reduce,计算每个tag从属的资源数量。
    一开始是使用count进行累加的,结果发现很多数字都比实际结果多了一倍,也就是说有些标签,只有一个资源标注了,但是统计的结果却是二。
    于是,我就将统计count的方式,改成了累计_id,结果发现确实是将很多数据重复记录了,但也不是每次都这样。于是在记录的时候,再加上了去重的指令,结果依然无效。
    代码如下:

    map = %Q{
    function() {
    var id = this._id;
    this.tag_ids.forEach(function(tag_id) {
    emit(tag_id, {
    resources: [id]
    })
    })
    }
    }
    reduce = %Q{
    function(key, values) {
    var result = {
    resources: [],
    };
    values.forEach(function(value) {
    value.resources.forEach(function(resource){
    result.resources.push(resource);
    });
    });
    return result;
    }
    }
    Resource.map_reduce(map, reduce).out(inline: true);

    请帮忙看看。

    全部代码:https://gitcafe.com/lukefan/test6
    上面的函数在:https://gitcafe.com/lukefan/test6/blob/master/app/models/resource.rb
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4507 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 05:34 · PVG 13:34 · LAX 22:34 · JFK 01:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.