你可以试试这个:db.yourCollectionName.aggregate([{
$group: {
_id: { name: '$_id.name', dept: '$_id.dept' },
data: { $push: { $split: [{ $concat: ["$_id.Code",",", { $toString:"$_id.count" }] }, ','] } }
}
},
{
$replaceRoot: { newRoot: { $mergeObjects: ['$_id', { $arrayToObject:"$data" }] } }
}])
解释:在name dept加执行Code &的串联
然后,data数组转换为object,并将它与_id对象将最终对象设为新root,
"Code1" :"4","Code2":"4"作为数字而不是字符串作为输入文档有count字段类型为int,然后尝试:db.yourCollectionName.aggregate([{
$group: {
_id: { name: '$_id.name', dept: '$_id.dept' },
data: { $push: { $split: [{ $concat: ["$_id.Code",",", { $toString:"$_id.count" }] }, ','] } }
}
}, {
$addFields: {
data: {
$map:
{
input:"$data",
as:"each",
in: [{ $arrayElemAt: ['$$each', 0] }, { $toInt: { $arrayElemAt: ['$$each', 1] } }]
}
}
}
},
{
$replaceRoot: { newRoot: { $mergeObjects: ['$_id', { $arrayToObject:"$data" }] } }
}])
只有在count字段在$group阶段中将字段转换为string之后,才将它转换为数字。