在 MongoDB 中,使用索引可以提高查询数据的效率和性能。创建索引可以使用 createIndex()
方法,在指定的集合上,指定一个或多个字段作为索引。下面是一个简单的示范:
- 连接 MongoDB 数据库
from pymongo import MongoClient
client = MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]
collection = db["mycollection"]
- 创建索引:
# 创建单个字段索引
collection.create_index("username")
# 创建多个字段复合索引
collection.create_index([("username", 1), ("email", -1)])
上面代码中,第一行创建了一个单个字段 username
的索引;第二行创建了一个复合索引,其中包括 username
和 email
两个字段,username
为升序索引,email
为降序索引。
- 查看索引
可以通过 index_information()
方法获得集合的所有索引信息:
print(collection.index_information())
输出结果:
{
'_id_': {'key': [('_id', 1)], 'v': 2},
'username_1': {'key': [('username', 1)], 'v': 2},
'username_1_email_-1': {'key': [('username', 1), ('email', -1)], 'v': 2}
}
上面代码中,第一个 _id_
是 MongoDB 默认创建的主键索引,其他两个是手动创建的索引。
- 使用索引查询数据
在查询数据时,可以使用 explain()
方法查看 MongoDB 的查询执行计划(execution plan),观察是否使用了索引。
query = {"username": "Alice"}
result = collection.find(query).limit(10).explain()
print(result['executionStats']['executionStages']['inputStage']['indexName'])
输出结果:
username_1
上面代码中,explain()
方法返回的结果中有一个 inputStage
字段,里面包含了执行计划的信息。其中,indexName
就是查询时使用的索引名称,如果使用了索引,该字段将显示相应的索引名称,否则为空。