计算一个变量的不同值

时间:2018-03-27 18:10:37

标签: mongodb mongodb-query aggregation-framework

鉴于此数据模型

{
    {
        "student":"a",
        "grade": "A"
    },
    {
        "student": "a",
        "grade": "B"
    },
    {
        "student": "B",
        "grade": "C"
    },
    {
        "student": "B",
        "grade": "C"
    }
}

我如何按学生分组并说学生a有1 A和1 B,学生b有2 C?我是mongo的新手,我尝试查找聚合和匹配,但不知道如何正确实现它。

谢谢。

2 个答案:

答案 0 :(得分:0)

您的查询将如下所示:

db.students.aggregate([
{$group:{_id:"$student", grade:"$grade", count:{$sum:1}}}

])

如果您有嵌套数组,请将其更改为:

db.students.aggregate([
{$group:{_id:"$parent.student", grade:"$parent.grade", count:{$sum:1}}}

])

其中parent是嵌套数组中的父元素。

答案 1 :(得分:0)

您需要按年级分组并使用$sum累加器。然后输出学生,使用$addToSet并将其添加到投影中:

db.students.aggregate([
  {
    $match: {} // match any student
  }, {
    $group: {
      _id: "$grade",
      total: {
        $sum: 1
      },
      student: {
        $addToSet: "$student"
      }
    }
  }, {
    $project: {
      "student": 1,
      _id: 0,
      total: 1
    }
  }
]);

注意:结果数据中的student字段可以根据需要命名,名称来自$group子句(“total”名称相同)。我还选择不在投影中返回_id