面试题答案
一键面试优化思路
- 减少数据扫描:如果集合数据量很大,确保
_id
字段有索引,因为聚合操作可能会用到它来定位文档。 - 合理使用聚合阶段:按顺序安排聚合阶段,先过滤掉不需要的数据,再进行复杂的计算操作,减少中间数据量。
实现代码(以 MongoDB 为例)
db.collection('yourCollectionName').aggregate([
{
$unwind: "$orders"
},
{
$addFields: {
"orders.totalAmount": {
$reduce: {
input: "$orders.products",
initialValue: 0,
in: { $add: ["$$value", { $multiply: ["$$this.price", "$$this.quantity"] }] }
}
}
}
}
]);
上述代码首先使用$unwind
将orders
数组展开,然后通过$addFields
和$reduce
数组表达式计算每个订单中产品的总金额并添加到orders
文档中。