面试题答案
一键面试在MongoDB中创建复合索引的语法如下:
db.collection.createIndex({field1: <type1>, field2: <type2>, ...})
其中,field1
、field2
等是要包含在复合索引中的字段,<type1>
、<type2>
等是字段对应的索引类型(如1表示升序,-1表示降序)。
适合使用复合索引的实际业务场景举例:
场景一:电商订单查询
假设电商系统中有订单集合orders
,包含字段customer_id
(客户ID)、order_date
(订单日期)和order_amount
(订单金额)。
常见查询可能是根据客户ID和订单日期范围来查找订单,例如:
db.orders.find({customer_id: "12345", order_date: {$gte: ISODate("2023-01-01"), $lte: ISODate("2023-12-31")}})
此时可以创建复合索引:
db.orders.createIndex({customer_id: 1, order_date: 1})
这样可以加速基于客户ID和订单日期范围的查询,因为索引结构会先按照客户ID排序,相同客户ID下再按订单日期排序,符合查询的筛选逻辑。
场景二:社交平台用户搜索
社交平台的用户集合users
,有gender
(性别)、age
(年龄)和location
(所在地)字段。
如果经常有需求按照性别、年龄范围和所在地来查找用户,比如:
db.users.find({gender: "female", age: {$gte: 20, $lte: 30}, location: "New York"})
则可以创建复合索引:
db.users.createIndex({gender: 1, age: 1, location: 1})
通过这个复合索引,查询时可以快速定位到符合条件的用户数据,提高查询效率。