我正在尝试汇总和改革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中工作正常,这里需要将数组值数组到车把页面