【问题标题】:Couchbase Map/Reduce to count total by document typeCouchbase Map/Reduce 按文档类型计算总数
【发布时间】:2014-04-30 00:16:39
【问题描述】:

我将事件数据存储在 Couchbase 文档中,如下所示:

{ 
  user: {
    id: '0BE2DA2B-9C8F-432D-88C2-B2C1D8D0E4B4',
    device: { 'manufacturer': 'Apple', 'os': 'iOS', 'name': 'iPhone', 'version': '5S' }
  },
  event_type: 'INTERACTION_A',
  country: 'GB',
  timestamp: 1398781631233
}

我创建了 Map/Reduce 查询来告诉我 iPhone 用户提交了多少事件。但是,是否可以使用 Map/Reduce 来按 OS 查询有多少唯一设备正在提交事件?

每个单独的设备可能已经提交了 1000 多个事件,但结果将显示系统已经看到的操作系统的唯一设备数量。我试图最终得到一个看起来像这样的数据:

{ 'iOS': 2343, 'Android': 6343 }

是否可以在单个 Couchbase 视图中执行此操作?

【问题讨论】:

    标签: mapreduce couchbase


    【解决方案1】:

    是的,这是可能的。您只需在查询中使用group=true&group_level=1

    创建一个类似的视图:

    map : function(){
      emit(doc.os, null);
    }
    
    reduce: _count
    

    然后将group=true&group_level=1 添加到您的查询中:

    http://127.0.0.1:8092/default/_design/dev_<designDocName>/_view/<viewName>?connection_timeout=60000&limit=10&skip=0&group=true&group_level=1

    还可以查看此链接以获取更多示例:

    Writing a simple group by with map-reduce (Couchbase)

    http://hardlifeofapo.com/basic-couchbase-querying-for-sql-people/

    http://blog.couchbase.com/understanding-grouplevel-view-queries-compound-keys

    【讨论】:

    • 我认为这不是我想要的。我的理解(根据我在数据集上运行它所看到的)是它会告诉我我们为每个操作系统看到了多少事件。我要查找的是操作系统的离散设备数量
    • @edlea 如果您将设备添加到密钥中 - emit([doc.user.device.os,doc.user.id], null) - 并使用 group=true 调用视图,您将获得每个操作系统的唯一设备。然后您就可以将它们计入list
    【解决方案2】:

    我认为我最初的问题可能过于含糊。但是,我已经达到了这个解决方案:

    map: function (doc, meta) {
           emit([doc.user.device.os, doc.user.id], null);
         }
    
    reduce: function (keys, values, rereduce) {
              var os = {};
              keys.forEach(function (k) { os[k] = 1; });
              return Object.keys(os).length;
            }
    

    使用 group=true&group_level=1 运行此视图可以得到我想要的结果。

    我不确定它是否会扩展,或者是否需要考虑重新减少,但它适用于我的测试数据集。

    【讨论】:

      猜你喜欢
      • 2016-08-01
      • 1970-01-01
      • 2012-10-24
      • 1970-01-01
      • 1970-01-01
      • 2012-05-06
      • 1970-01-01
      • 2020-01-13
      • 1970-01-01
      相关资源
      最近更新 更多