MongoDB 高级索引学习笔记
什么是 MongoDB 高级索引?
MongoDB 高级索引指的是除了基本索引(即单键索引、复合索引)之外的其他索引类型,包括全文本索引、地理空间索引和哈希索引。
全文本索引
全文本索引用于对文本字段进行全文本搜索。在创建全文本索引时,需要指定要建立索引的字段和语言。例如:
javascriptCopy Codedb.articles.createIndex({ content: "text" }, { default_language: "english" });
全文本索引支持以下查询操作符:
操作符 | 描述 |
---|---|
$text | 执行全文本搜索 |
$search | 根据指定的搜索字符串执行全文本搜索 |
$language | 指定查询所使用的语言 |
例如,假设我们有一张名为 articles
的集合,其中的每个文档都包含一个 content
字段存储文章内容。我们可以使用以下命令来搜索所有包含 “MongoDB” 关键字的文章:
javascriptCopy Codedb.articles.find({ $text: { $search: "MongoDB" } });
地理空间索引
地理空间索引用于对存储地理位置的字段进行查询。在创建地理空间索引时,需要指定要建立索引的字段以及索引类型。例如:
javascriptCopy Codedb.places.createIndex({ location: "2dsphere" });
地理空间索引支持以下查询操作符:
操作符 | 描述 |
---|---|
$near | 返回与指定点最近的文档 |
$geoWithin | 返回在指定区域内的文档 |
$geoIntersects | 返回与指定几何图形相交的文档 |
例如,假设我们有一张名为 places
的集合,其中的每个文档都包含一个 location
字段存储该地点的经纬度坐标。我们可以使用以下命令来查找离给定点最近的地点:
javascriptCopy Codedb.places.find({
location: {
$near: {
$geometry: { type: "Point", coordinates: [ -73.97, 40.77 ] },
$maxDistance: 5000
}
}
});
哈希索引
哈希索引用于对任意长度的字段进行索引,例如字符串、二进制数据等。在创建哈希索引时,需要指定要建立索引的字段和哈希函数。例如:
javascriptCopy Codedb.myCollection.createIndex({ myField: "hashed" });
哈希索引只支持精确匹配查询,不支持范围查询。
例如,假设我们有一张名为 myCollection
的集合,其中的每个文档都包含一个 myField
字段存储一个字符串。我们可以使用以下命令来查找匹配给定字符串的文档:
javascriptCopy Codedb.myCollection.find({ myField: { $eq: "myString" } });
总结
本文介绍了 MongoDB 高级索引的三种类型:全文本索引、地理空间索引和哈希索引。每种索引类型都有其特定的用途和使用方式,可以根据具体的需求选择合适的索引类型来优化查询性能。