将2个字段分组为1个字段

时间:2018-04-18 07:33:34

标签: mongodb mongodb-query aggregation-framework

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

DownloadStatus

结果应该是这样的:

[
    {
        _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 } ] 电话中是这样。

1 个答案:

答案 0 :(得分: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
}