PyMongo 中 MongoDB 索引操作的高级用法
- 创建索引
创建索引可以大大提高查询效率。可以通过 PyMongo 的 create_index() 方法来创建索引。
示例:
from pymongo import MongoClient client = MongoClient() db = client['test_db'] collection = db['test_collection'] # 创建单字段索引 collection.create_index('name') # 创建复合索引 collection.create_index([('name', 1), ('age', -1)])
- 查看索引
可以使用 PyMongo 的 list_indexes() 方法来查看集合中的索引。
示例:
from pymongo import MongoClient client = MongoClient() db = client['test_db'] collection = db['test_collection'] # 查看所有索引 print(collection.list_indexes()) # 查看指定索引 print(collection.index_information())
- 删除索引
可以使用 PyMongo 的 drop_index() 方法来删除集合中的某个索引。可以将索引名称传递给 drop_index() 方法,也可以通过 index_information() 方法查看索引信息,然后传递指定索引名称给 drop_index() 方法。
示例:
from pymongo import MongoClient client = MongoClient() db = client['test_db'] collection = db['test_collection'] # 删除指定索引 collection.drop_index('name_1_age_-1') # 删除所有索引 collection.drop_indexes()
- 索引选项
在创建索引时,可以使用各种选项来控制索引的行为。下面列举了一些常用的选项:
选项 | 描述 |
---|---|
background | 在后台创建索引,不阻塞其他操作。默认为 True。 |
unique | 索引中的键必须各不相同。默认为 False。 |
name | 索引名称。如果未提供名称,则使用 MongoDB 自动生成的名称。 |
sparse | 索引中不包含任何文档的字段或字段值为 null 的文档。默认为 False。 |
expireAfterSeconds | 用于 TTL 索引。指定文档在过期后的秒数。 |
示例:
from pymongo import MongoClient client = MongoClient() db = client['test_db'] collection = db['test_collection'] # 创建唯一索引 collection.create_index('name', unique=True) # 创建后台索引 collection.create_index('age', background=True) # 创建 TTL 索引 collection.create_index('expire_at', expireAfterSeconds=3600)
- 全文索引
MongoDB 还支持全文索引,可以通过文本搜索来查找文档。在使用全文索引之前,需要先创建全文索引,并使用 text() 方法来查询。
示例:
from pymongo import MongoClient client = MongoClient() db = client['test_db'] collection = db['test_collection'] # 创建全文索引 collection.create_index([('content', 'text')], name='content_index') # 全文搜索 results = collection.find({'$text': {'$search': '编程'}}) for result in results: print(result)
- 地理空间索引
MongoDB 还支持地理空间索引,可以根据经纬度等位置信息来查询文档。在使用地理空间索引之前,需要先创建地理空间索引,并使用 $near、$geoIntersects 等操作符来查询。
示例:
from pymongo import MongoClient from pymongo import GEO2D client = MongoClient() db = client['test_db'] collection = db['test_collection'] # 创建地理空间索引 collection.create_index([('location', GEO2D)]) # 查询附近的文档 results = collection.find({'location': {'$near': [116.3975, 39.9085]}}) for result in results: print(result)
相关文章