【问题标题】:Mongodb aggregation query by grouping multiple collections通过对多个集合进行分组的MongoDB聚合查询
【发布时间】:2016-12-08 19:23:02
【问题描述】:

我在 mongodb 中有两个集合。

请求集合

  1. _id
  2. IP地址
  3. 创建顿

geoip 集合

  1. _id
  2. IP地址
  3. 国家
  4. 城市

geoip是IP地址的查找表,这里是唯一的。

我需要以下结果,以查找来自每个国家/地区的请求总数。换句话说,就是以下 2 列。

国家和记录计数(来自基于 ipaddress 的请求集合)

由于这需要对 2 个单独的集合进行分组并将它们组合起来以获得结果,所以我在这里不知所措。

【问题讨论】:

    标签: mongodb aggregation-framework


    【解决方案1】:

    您需要使用$lookup 阶段操作,该操作用于与其他集合执行连接并获取结果。然后将所选字段分组到所需的计数。

    [
     {$lookup: {
        from: 'geoip',
        localField: 'ipaddress',
        foreignField: 'ipaddress',
        as: 'data'
     }},
     {$unwind: 'data'},
     {$group: {_id: '$data.country', count: {$sum: 1}}}
    
    ]
    

    【讨论】:

    • 这很好用!是否可以通过 map reduce 来实现这一点,因为旧 mongodb 版本不支持查找。
    • @FoxShrill 我没有经常使用 map-reduce。您可能可以在这里阅读此内容tebros.com/2011/07/…
    • map/reduce 不支持任何形式的跨集合连接;你能做的最好的事情是运行两个单独的 map/reduce 步骤,然后让第二个“减少”第一个的输出,填充缺失的数据......但这确实效率低下
    • 但是如果我们需要为ex加入3个集合怎么办?
    猜你喜欢
    • 1970-01-01
    • 2022-12-11
    • 1970-01-01
    • 2019-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-19
    相关资源
    最近更新 更多