汇总嵌入文档和唯一值计数

时间:2016-03-05 11:57:49

标签: mongodb aggregation-framework

我的文档类似于存储在我的数据库中的文档:

[
  {
    "location_path": {
      "Country": "US",
      "State": "Illinois",
      "City": "Chicago"
    },
    "myvalue": 1
  },
  {
    "location_path": {
      "Country": "US",
      "State": "Houston",
      "City": "Texas"
    },
    "myvalue": 4
  },
  {
    "location_path": {
      "Country": "US",
      "State": "Illinois",
      "City": "Chicago"
    },
    "myvalue": 2
  }
]

我在构建聚合的$group阶段时遇到一些问题,以便使用相同的位置路径 对每个文档进行分组遇到myvalue的每个唯一值的组。所以,我的预期输出将是:

{
    "location_path": {
        "Country": "US",
        "State": "Illinois",
        "City": "Chicago"
    },
    "myvalue": {1: 1, 2: 1}
},
{
    "location_path": {
        "Country": "US",
        "State": "Houston",
        "City": "Texas"
    },
    "myvalue": {4: 1}
}

我怎样才能达到类似于我想要的东西?到目前为止,我将此作为我的$group阶段:

{
    '$group': {
        '_id': {
            'location_path': '$location_path',
            'option': '$myvalue'
        },
        'count': {'$sum': 1}
    }
}

如果结果与我的预期有所不同,那没关系,但location_pathmyvalue每个唯一值的计数很重要。

1 个答案:

答案 0 :(得分:1)

{
    '$group': {
        '_id': { 'path': '$location_path', 'value': '$myvalue'},
        'count': {'$sum': 1}
    },
    '$project': {
        '_id': '$_id.path',
        'myvalue': '$_id.value',
        'count': '$count',
    },
    '$group': {
        '_id': '$_id',
        'values': {'$push': {'myvalue': '$myvalue', 'count': '$count'}}
    }
}