【问题标题】:Group by 2 Fields as 1 Field按 2 个字段分组为 1 个字段
【发布时间】:2018-04-18 16:08:14
【问题描述】:

我要做的是按用户的主要次要角色对用户进行分组,并计算具有所述角色的用户数量。用户列表如下所示:

[
    {
        _id: 1,
        roles: {
            primary: 'Cook',
            secondary: null
        }
    },
    {
        _id: 2,
        roles: {
            primary: 'Waiter',
            secondary: 'Cashier'
        }
    },
    {
        _id: 3,
        roles: {
            primary: 'Cashier',
            secondary: 'Bar Tender'
        }
    }
]

结果应该是这样的:

[
    {
        role: 'Cook',
        count: 1
    },
    {
        role: 'Waiter',
        count: 1
    },
    {
        role: 'Cashier',
        count: 2
    }
]

我不太确定这是否可以做到,至少在一个 $group 电话中是这样。

【问题讨论】:

    标签: mongodb mongodb-query aggregation-framework


    【解决方案1】:

    您可以将两个字段值放入一个数组中,$unwind 然后$group

    db.collection('crap').aggregate([
      { "$project": {
          "roles": {
            "$filter": {
              "input": ["$roles.primary","$roles.secondary"],
              "cond": { "$ne": [ "$$this", null ] }
            }
          }
      }},
      { "$unwind": "$roles" },
      { "$group": {
        "_id": "$roles",
        "count": { "$sum": 1 }  
      }}
    ])
    

    我们使用$filter 删除投影数组中的任何null 值。

    关于问题中的文件,这会给你:

    {
        "_id" : "Bar Tender",
        "count" : 1.0
    }
    
    {
        "_id" : "Waiter",
        "count" : 1.0
    }
    
    {
        "_id" : "Cashier",
        "count" : 2.0
    }
    
    {
        "_id" : "Cook",
        "count" : 1.0
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-18
      • 2014-12-31
      • 1970-01-01
      • 1970-01-01
      • 2018-11-28
      • 2020-07-27
      相关资源
      最近更新 更多