汇总和分组mongodb数据

时间:2019-05-22 06:27:07

标签: node.js mongodb express

我正在尝试汇总和改革mongodb数据,并根据名称对其进行排序。所有数据都属于同一集合。

Node JS,Express JS,MongoDB

{ 
   "_id" : "1"
   "c_cat" : "one",
   "c_level" : "levelone",
   "c_group" : "groupone"
}

 { 
   "_id" : "2"
   "c_cat" : "one",
   "c_level" : "levelone",
   "c_group" : "grouptwo", 
 }

 { 
   "_id" : "3"
   "c_cat" : "one",
   "c_level" : "leveltwo",
   "c_group" : "groupthree", 
 }

 { 
   "_id" : "4"
   "c_cat" : "two",
   "c_level" : "leveltwo",
   "c_group" : "groupfour", 
 }

 { 
   "_id" : "5"
   "c_cat" : "two",
   "c_level" : "leveltwo",
   "c_group" : "groupfive", 
 }
  { 
   "_id" : "6"
   "c_cat" : "two",
   "c_level" : "levelfive",
   "c_group" : "groupfive", 
 }

使用嵌套结构重塑后的预期实际结果应如下

{ 
   "c_cat" : "one"
    {
      "c_level" : "levelone"
        {
            "c_group" : ["groupone", "grouptwo"]
        }
      "c_level" : "leveltwo"
        {
            "c_group" : ["groupthree"]
        }
    }
}

{ 
   "c_cat" : "two"
    {
      "c_level" : "leveltwo"
        {
            "c_group" : ["groupfour", "groupfive"]
        }
      "c_level" : "levelfive"
        {
            "c_group" : ["groupfive"]
        }
    }
}

使用推荐的脚本,我得到了例外的结果

db.collection.aggregate([
  {
    "$group": {
      "_id": {
        "c_cat": "$c_cat",
        "c_level": "$c_level"
      },
      c_group: {
        $push: "$c_group"
      },
      "bookCount": {
        "$sum": 1
      }
    }
  },
  {
    "$group": {
      "_id": "$_id.c_cat",
      "c_level": {
        "$push": {
          "c_level": "$_id.c_level",
          "c_group": "$c_group"
        },

      },
      "count": {
        "$sum": "$bookCount"
      }
    }
  }
  ])

我使用相同的内容将输出传递给下面的页面

router.get('/catalogue', function(req, res) {   

        var course = {};
        Ct_course.aggregate([


{
    "$group": {
      "_id": {
        "c_cat": "$c_cat",
        "c_level": "$c_level"
      },
      c_group: {
        $push: "$c_group"
      },
      "bookCount": {
        "$sum": 1
      }
    }
  },
  {
    "$group": {
      "_id": "$_id.c_cat",
      "c_level": {
        "$push": {
          "c_level": "$_id.c_level",
          "c_group": "$c_group"
        },

      },
      "count": {
        "$sum": "$bookCount"
      }
    }
  }
        ],
    function(err, results){  course = results;
    console.log(course); 
        res.render("course/catalogue",{course:course});
    });


});

我进入控制台的结果是

[ { _id: 'Safety',
    c_level: [ [Object], [Object], [Object], [Object] ],
    count: 13 },
  { _id: 'D Level',
    c_level: [ [Object], [Object], [Object], [Object], [Object] ],
    count: 18 },
  { _id: 'C Level',
    c_level: [ [Object], [Object], [Object], [Object] ],
    count: 45 },
  { _id: 'A Level', c_level: [ [Object] ], count: 1 },
  { _id: 'B Level', c_level: [ [Object], [Object] ], count: 18 },
  { _id: 'Special Courses',
    c_level:
     [ [Object],
       [Object],
       [Object],
       [Object],
       [Object],
       [Object],
       [Object],
       [Object],
       [Object] ],
    count: 34 } ]

聚合在mongoshell中工作正常,这里需要将数组值数组到车把页面

0 个答案:

没有答案