面试题答案
一键面试实现思路
- 遍历文档:在Map函数中遍历CouchDB中的文档。
- 提取订单:对于每个文档,遍历
orders
数组。 - 计算订单总价:对于每个订单,遍历其
products
数组,计算产品价格总和。 - 筛选订单:如果订单总价大于1000,提取该订单中所有产品的名称。
优化策略
- 减少中间数据生成:在遍历过程中直接处理和筛选数据,避免生成大量不必要的中间数据结构。
- 早期退出优化:在计算订单总价时,如果发现总价已经超过1000,可提前停止对该订单剩余产品价格的计算。
示例Map函数(JavaScript示例,CouchDB中Map函数通常用JavaScript编写)
function (doc) {
if (doc.orders) {
doc.orders.forEach(function(order) {
var totalPrice = 0;
var productNames = [];
order.products.forEach(function(product) {
totalPrice += product.price;
productNames.push(product.product_name);
if (totalPrice > 1000) {
emit(null, productNames);
return; // 总价超过1000,提前退出对该订单产品的遍历
}
});
});
}
}
以上代码通过直接遍历和条件判断,在计算总价的同时收集产品名称,并且在总价超过1000时提前退出,减少不必要计算,提高大数据量下的性能。