面试题答案
一键面试- $unwind使用顺序:
- 首先对
departments
数组进行$unwind
。 - 然后对展开后的
departments.projects
数组进行$unwind
。
- 首先对
- 理由:
- 因为
projects
数组是嵌套在departments
数组中的,要全面展开项目,需要先将外层的departments
数组展开,这样才能进一步对每个部门下的projects
数组进行展开。如果先对projects
数组进行unwind
而不先展开departments
数组,由于projects
数组所在的departments
数组未展开,会导致数据结构不满足预期展开需求。
- 因为
- 聚合框架示例代码(以MongoDB为例):
db.employees.aggregate([
{
$unwind: "$departments"
},
{
$unwind: "$departments.projects"
},
{
$project: {
name: 1,
deptName: "$departments.deptName",
project: "$departments.projects",
_id: 0
}
}
]);
上述代码中,通过第一个$unwind
展开departments
数组,第二个$unwind
展开departments.projects
数组,最后通过$project
阶段整理输出结果集,包含员工姓名name
、部门名称deptName
和项目名称project
。