Appearance
MongoDB 高级索引
复合索引
多字段组成一个索引,字段顺序影响可支持的查询与排序:
javascript
db.orders.createIndex({ userId: 1, createdAt: -1 });适合:{ userId: 1 }、{ userId: 1, createdAt: -1 } 等查询与排序;仅 { createdAt: -1 } 无法高效使用该索引。
多键索引(数组)
对数组字段建索引时,MongoDB 会为每个数组元素建索引项(多键索引)。一个文档的数组字段在一个多键索引中最多贡献一项(3.4+ 的规则),适合对数组元素做等值或范围查询。
文本索引
全文检索用文本索引:
javascript
db.articles.createIndex({ content: "text", title: "text" });
db.articles.find({ $text: { $search: "MongoDB 教程" } });可指定权重、语言等,见 MongoDB 全文检索。
地理空间索引
二维球面(如经纬度):
javascript
db.places.createIndex({ location: "2dsphere" });
db.places.find({
location: {
$nearSphere: {
$geometry: {
type: "Point",
coordinates: [116.4, 39.9],
},
},
},
});TTL 索引
使文档在指定时间后自动删除:
javascript
db.sessions.createIndex({ createdAt: 1 }, { expireAfterSeconds: 3600 });唯一索引与部分索引
javascript
db.users.createIndex({ email: 1 }, { unique: true });
db.users.createIndex(
{ status: 1 },
{ partialFilterExpression: { status: "active" } },
);部分索引只对满足条件的文档建索引,节省空间。下一节介绍 MongoDB 索引限制。