面试题答案
一键面试Map函数代码
function(doc) {
if (doc.category && doc.category.includes('phones')) {
emit(doc.product, doc.price);
}
}
处理数组字段
- 判断数组存在:首先通过
if (doc.category)
判断category
字段是否存在于文档中。如果不存在,后续操作会引发错误。 - 检查元素存在:使用
includes
方法检查category
数组中是否包含phones
。includes
方法是JavaScript数组提供的便捷方法,用于判断数组中是否包含某个元素。
性能问题及优化方向
- 性能问题
- 数据量大时扫描性能:如果文档集合非常大,对每个文档都进行
includes
操作会消耗较多时间,尤其是在服务器资源有限的情况下。 - 数组遍历开销:
includes
方法内部会遍历数组,当数组元素较多时,遍历的开销会增大。
- 数据量大时扫描性能:如果文档集合非常大,对每个文档都进行
- 优化方向
- 减少不必要扫描:如果有条件,可以在插入文档时进行预过滤,只插入符合条件的文档到特定视图,减少视图计算时需要处理的文档数量。
- 数据结构优化:如果可能,将
category
字段改为更易于查找的数据结构,例如集合(set),在JavaScript中可以使用Set
类型,其查找效率在某些情况下比数组更高。