mongodb - 在嵌套文档上使用 mongo 进行 MapReduce

标签 mongodb mapreduce

我有以下文档结构:

{
  "country_id" : 328,
  "country_name" : "Australien",
  "cities" : [{
      "city_id" : 19398,
      "city_name" : "Bondi Beach (Sydney)"
    }, {
      "city_id" : 31102,
      "city_name" : "Double Bay (Sydney)"
    }, {
      "city_id" : 31101,
      "city_name" : "Rushcutters Bay (Sydney)"
    }, {
      "city_id" : 817,
      "city_name" : "Sydney"
    }, {
      "city_id" : 31022,
      "city_name" : "Wolly Creek (Sydney)"
    }, {
      "city_id" : 18851,
      "city_name" : "Woollahra"
    }],
  "regions" : {
    "region_id" : 796,
    "region_name" : "Australien: New South Wales (Sydney)"
  }
}

对于分面导航,我想计算属性country_id、cities.city_id、regions_region_id,我想我可以使用map/reduce 来做到这一点。

对于给定的结构这可能吗?

也许有人可以指出我正确的 map /减少方向。

最佳答案

Mongo map-reduce 示例可以在这里找到:http://docs.mongodb.org/manual/tutorial/map-reduce-examples/

每个唯一的country_id、city_id和region_id元组的文档数量很简单:

> function m() { 
    for(var i in this.cities) {     
         emit({country_id:this.country_id, 
               city_id:this.cities[i].city_id,
               region_id:this.regions.region_id}, 
              1); 
    } }



> function r(id,docs) {
      return Array.sum(docs);
}
> db.loc.mapReduce(m,r,{out:"map_reduce_out"})
{
    "result" : "map_reduce_out",
    "timeMillis" : 5,
    "counts" : {
        "input" : 1,
        "emit" : 6,
        "reduce" : 0,
        "output" : 6
    },
    "ok" : 1,
}
> db.map_reduce_out.find()
{ "_id" : { "country_id" : 328, "city_id" : 817, "region_id" : 796 }, "value" : 1 }
{ "_id" : { "country_id" : 328, "city_id" : 18851, "region_id" : 796 }, "value" : 1 }
{ "_id" : { "country_id" : 328, "city_id" : 19398, "region_id" : 796 }, "value" : 1 }
{ "_id" : { "country_id" : 328, "city_id" : 31022, "region_id" : 796 }, "value" : 1 }
{ "_id" : { "country_id" : 328, "city_id" : 31101, "region_id" : 796 }, "value" : 1 }
{ "_id" : { "country_id" : 328, "city_id" : 31102, "region_id" : 796 }, "value" : 1 }

关于mongodb - 在嵌套文档上使用 mongo 进行 MapReduce,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16319283/

相关文章:

java - 如何将Java程序重写为Hadoop作业?

apache - 下一代MapReduce的架构和设计文档

hadoop - 配置单元表中的分区/桶的数量与它为对此数据的任何操作启动的映射任务的数量之间是否存在关系?

java - Spring 数据: Java configuration for MongoDB without XML

mysql - 创建用于组合的 mongodb 容器时出错

node.js - 如何在 Mongoose 中填充引用另一个模式的对象数组

objective-c - 在 Mac 应用程序和 Web 之间同步 'lot' 小块数据的最佳方法是什么?

mongodb - 如何过滤子文档数组?

hadoop - 在 Hadoop 中将 null 写入 DataOutput

hadoop - 从 hadoop 中的映射器中消除重复的键/值对