MST

星途 面试题库

面试题:MongoDB专享索引:中等难度查询优化问题

假设有一个MongoDB集合存储了电商订单数据,文档结构包含订单号(order_id)、用户ID(user_id)、订单金额(amount)、下单时间(order_time)等字段。现在需要频繁查询某个用户(已知user_id)在特定时间段内(例如2023年1月1日到2023年12月31日)的订单,并且按订单金额从高到低排序。请说明应该如何创建专享索引来加速这个查询,并写出创建索引的代码。
41.5万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试
  1. 分析
    • 要加速对特定用户在特定时间段内按订单金额排序的查询,需要考虑user_idorder_timeamount字段。
    • 因为user_idorder_time用于筛选数据,amount用于排序,最佳索引应该包含这些字段,并且字段顺序很重要,user_idorder_time在前,amount在后。
  2. 创建索引代码: 在MongoDB shell中,可以使用以下代码创建复合索引:
db.your_collection_name.createIndex({user_id: 1, order_time: 1, amount: -1});

上述代码中,your_collection_name需要替换为实际存储电商订单数据的集合名称。{user_id: 1, order_time: 1, amount: -1}表示创建一个复合索引,其中user_idorder_time按升序排列,amount按降序排列。这种索引结构有助于快速定位特定用户在特定时间段内的数据,并按订单金额从高到低排序。