Python代码实现分页功能
import pymongo
def get_paginated_data(page_num):
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["your_database"]
collection = db["your_collection"]
# 计算跳过的文档数
skip_count = (page_num - 1) * 50
data = list(collection.find().sort("timestamp", pymongo.DESCENDING).skip(skip_count).limit(50))
return data
优化查询性能策略
- 索引使用:
- 创建索引:为
timestamp
字段创建索引。在 MongoDB 中可以使用以下命令创建索引:
db.your_collection.createIndex({timestamp: -1})
- **复合索引**:如果除了按 `timestamp` 排序外,还经常根据其他字段进行查询或过滤,可以考虑创建复合索引。例如,如果还会根据 `category` 字段过滤数据,可以创建如下复合索引:
db.your_collection.createIndex({category: 1, timestamp: -1})
- 投影:仅返回需要的字段,减少数据传输量。例如,如果只需要
timestamp
和 title
字段,可以这样查询:
data = list(collection.find({}, {"timestamp": 1, "title": 1, "_id": 0}).sort("timestamp", pymongo.DESCENDING).skip(skip_count).limit(50))
- 分片:对于海量数据,考虑使用 MongoDB 的分片功能。将数据分布在多个服务器上,减轻单个服务器的负载,提高查询性能。需要在 MongoDB 集群中设置分片键,选择合适的分片键很重要,例如可以选择
timestamp
字段作为分片键,这样可以按时间范围对数据进行分割存储,在分页查询时能够更高效地定位数据。