如何展平MongoDB聚合结果?聚合查询结构重映射问询
展平MongoDB聚合查询结果的方法
嘿,我来帮你搞定这个聚合结果展平的问题!你现在的查询结果里VacancyId和Status都嵌套在_id对象里,想要把它们变成顶级字段和Count同级对吧?其实只需要在现有聚合管道的末尾添加一个阶段来重映射结构就行,这里有两种常用的方法:
方法1:使用$project直接指定输出字段
$project可以精确控制每个输出字段的来源,我们直接把_id里的字段提取到顶层,同时去掉原来的_id字段:
db.getCollection('apprenticeships').aggregate([ { $match: { 'Vacancy._id': { $in: [1, 2, 3] } } }, { $group: { '_id': { 'VacancyId': '$Vacancy._id', 'Status': '$Status' }, 'Count': { $sum: 1 } } }, { $sort: { '_id.VacancyId': 1, '_id.Status': 1 } }, // 新增的$project阶段 { $project: { _id: 0, // 去掉原来的_id字段 VacancyId: "$_id.VacancyId", // 从_id里提取VacancyId到顶层 Status: "$_id.Status", // 从_id里提取Status到顶层 Count: 1 // 保留Count字段 } } ])
方法2:使用$set+$unset组合
这种方法更直观,先把_id里的字段添加为顶级字段,再删除原来的_id:
db.getCollection('apprenticeships').aggregate([ { $match: { 'Vacancy._id': { $in: [1, 2, 3] } } }, { $group: { '_id': { 'VacancyId': '$Vacancy._id', 'Status': '$Status' }, 'Count': { $sum: 1 } } }, { $sort: { '_id.VacancyId': 1, '_id.Status': 1 } }, // 新增阶段:先添加顶级字段 { $set: { VacancyId: "$_id.VacancyId", Status: "$_id.Status" } }, // 删除原来的_id字段 { $unset: "_id" } ])
最终输出结果
不管用哪种方法,最终的输出结构都会变成你想要的扁平化形式:
{ "VacancyId" : 1, "Status" : 90, "Count" : 40.0 }
内容的提问来源于stack exchange,提问作者Peter Morris
相关产品推荐
相关产品推荐

