MongoDB聚合框架,用于获取字段值的频率

时间:2016-09-22 14:31:18

标签: mongodb mongodb-query aggregation-framework mongodb-aggregation

我有一个集合,其中填充了符合以下架构的文档:

{
  _id,
  name: String,
  actionTime: Date,
  n1: Number,  // 1<=n1<=10
  n2: Number,  // 1<=n2<=10
  n3: Number   // 1<=n3<=20
}

我想得到每个可能数字n1,n2,n3的频率。因此,例如,如果我们有以下文件:

{
  _id: 1,
  name: 'label1',
  actionTime: Date.now,
  n1: 4,
  n2: 9,
  n3: 18
},
{
  _id: 2,
  name: 'label2',
  actionTime: Date.now,
  n1: 1,
  n2: 6,
  n3: 11
},
{
  _id: 3,
  name: 'label3',
  actionTime: Date.now,
  n1: 4,
  n2: 2,
  n3: 5
}

我想要一份表格的结果文件(或者像这样):

{
  "n1": {
    "_id": 1, "total": 1,
    "_id": 2, "total": 0,
    ...
    "_id": 4, "total": 2,
    ...

  },
  "n2": {
    "_id": 1, "total": 0,
    "_id": 2, "total": 1,
    ...
    "_id": 6, "total": 1,
    ...
    _id: 9, 'total': 1,
    ...
  },
  "n3": {
    "_id": 1, "total": 0,
    ...
    "_id": 5, "total": 1,
    ...
    "_id": 11, "total": 1,
    ...
    "_id": 18, "total": 1,
    ...
  }
}

现在,我使用聚合框架和以下命令:

db.col.aggregate( [ { $group: { _id: "$n1", total: { $sum: 1 } } }, { $sort: { _id: 1 } } ] )

获得所需的结果,但仅限于一个字段(n1)。我可以为所有有趣的字段迭代这个过程,但我想知道是否有更紧凑的查询来同时获取所有字段。

0 个答案:

没有答案