面试题答案
一键面试- 聚合操作实现:
db.students.aggregate([ { $unwind: "$scores" }, { $group: { _id: "$_id", max_score: { $max: "$scores.score" }, min_score: { $min: "$scores.score" } } }, { $project: { student_id: "$_id", max_score: 1, min_score: 1, _id: 0 } } ]);
max
和min
累加器函数使用要点:- 使用要点:
$max
和$min
函数用于在$group
阶段对分组后的数据进行操作。$max
函数会遍历分组内的文档,找出指定字段(这里是scores.score
)的最大值,$min
函数则找出最小值。- 它们只能在
$group
阶段使用,并且需要与$group
的_id
字段配合使用,_id
字段定义了分组的依据,这里以学生的_id
进行分组,这样就可以针对每个学生分别计算最高和最低分数。
- 可能遇到的问题:
- 数据类型不一致:如果
scores.score
字段的数据类型不一致,例如部分是数字,部分是字符串,$max
和$min
操作可能会得到意外结果或者报错。在使用前需要确保scores.score
字段的数据类型统一为数值类型。 - 空数组情况:如果某个学生的
scores
数组为空,$max
和$min
函数可能返回null
。在实际应用中,需要根据业务需求决定如何处理这种情况,比如可以在聚合前增加过滤阶段,过滤掉scores
数组为空的文档,或者在结果处理阶段对null
值进行特殊处理。
- 数据类型不一致:如果
- 使用要点: