PyMongo 中 MongoDB 索引操作的高级用法

2023-04-15 00:00:00 索引 用法 高级
  1. 创建索引

创建索引可以大大提高查询效率。可以通过 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)])
  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())
  1. 删除索引

可以使用 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()
  1. 索引选项

在创建索引时,可以使用各种选项来控制索引的行为。下面列举了一些常用的选项:

选项 描述
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)
  1. 全文索引

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)
  1. 地理空间索引

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)

相关文章