MongoDB 高级索引学习笔记

什么是 MongoDB 高级索引?

MongoDB 高级索引指的是除了基本索引(即单键索引、复合索引)之外的其他索引类型,包括全文本索引、地理空间索引和哈希索引。

全文本索引

全文本索引用于对文本字段进行全文本搜索。在创建全文本索引时,需要指定要建立索引的字段和语言。例如:

javascriptCopy Code
db.articles.createIndex({ content: "text" }, { default_language: "english" });

全文本索引支持以下查询操作符:

操作符 描述
$text 执行全文本搜索
$search 根据指定的搜索字符串执行全文本搜索
$language 指定查询所使用的语言

例如,假设我们有一张名为 articles 的集合,其中的每个文档都包含一个 content 字段存储文章内容。我们可以使用以下命令来搜索所有包含 “MongoDB” 关键字的文章:

javascriptCopy Code
db.articles.find({ $text: { $search: "MongoDB" } });

地理空间索引

地理空间索引用于对存储地理位置的字段进行查询。在创建地理空间索引时,需要指定要建立索引的字段以及索引类型。例如:

javascriptCopy Code
db.places.createIndex({ location: "2dsphere" });

地理空间索引支持以下查询操作符:

操作符 描述
$near 返回与指定点最近的文档
$geoWithin 返回在指定区域内的文档
$geoIntersects 返回与指定几何图形相交的文档

例如,假设我们有一张名为 places 的集合,其中的每个文档都包含一个 location 字段存储该地点的经纬度坐标。我们可以使用以下命令来查找离给定点最近的地点:

javascriptCopy Code
db.places.find({ location: { $near: { $geometry: { type: "Point", coordinates: [ -73.97, 40.77 ] }, $maxDistance: 5000 } } });

哈希索引

哈希索引用于对任意长度的字段进行索引,例如字符串、二进制数据等。在创建哈希索引时,需要指定要建立索引的字段和哈希函数。例如:

javascriptCopy Code
db.myCollection.createIndex({ myField: "hashed" });

哈希索引只支持精确匹配查询,不支持范围查询。

例如,假设我们有一张名为 myCollection 的集合,其中的每个文档都包含一个 myField 字段存储一个字符串。我们可以使用以下命令来查找匹配给定字符串的文档:

javascriptCopy Code
db.myCollection.find({ myField: { $eq: "myString" } });

总结

本文介绍了 MongoDB 高级索引的三种类型:全文本索引、地理空间索引和哈希索引。每种索引类型都有其特定的用途和使用方式,可以根据具体的需求选择合适的索引类型来优化查询性能。