篇章一:MongoDB简介
1.1 MongoDB是什么?
MongoDB是一种高性能、可伸缩的NoSQL数据库,由C++语言编写,支持广泛的查询操作和强大的数据存储功能。它以文档存储形式组织数据,类似于JSON结构,易于使用和理解。
1.2 MongoDB的特点
- 灵活的文档结构:存储JSON风格的文档,无需预先定义模式。
- 易于扩展:可水平扩展,易于适应数据量的增长。
- 高可用性:支持复制和分片,提高数据可用性和故障转移能力。
- 高性能:高性能读写能力,适合处理大量数据。
篇章二:Python连接MongoDB
2.1 安装pymongo
使用pip安装pymongo库:
pip install pymongo
2.2 连接到MongoDB
from pymongo import MongoClient
# 连接到MongoDB服务
client = MongoClient('localhost', 27017)
# 选择数据库
db = client['mydatabase']
# 选择集合
collection = db['mycollection']
篇章三:数据操作
3.1 插入文档
# 插入单个文档
document = {"name": "张三", "age": 20}
result = collection.insert_one(document)
# 插入多个文档
documents = [{"name": "李四", "age": 25}, {"name": "王五", "age": 30}]
result = collection.insert_many(documents)
3.2 查询文档
# 查询所有文档
for doc in collection.find():
print(doc)
# 查询符合条件的文档
for doc in collection.find({"age": {"$gt": 20}}):
print(doc)
3.3 更新文档
# 更新单个文档
result = collection.update_one({"name": "张三"}, {"$set": {"age": 21}})
# 更新多个文档
result = collection.update_many({"name": "张三"}, {"$set": {"age": 21}})
3.4 删除文档
# 删除单个文档
result = collection.delete_one({"name": "张三"})
# 删除多个文档
result = collection.delete_many({"name": "张三"})
篇章四:聚合操作
聚合操作用于处理集合中的数据,生成新的结果集。
# 计算年龄大于20的人的平均年龄
pipeline = [
{"$match": {"age": {"$gt": 20}}},
{"$group": {"_id": None, "average_age": {"$avg": "$age"}}}
]
result = collection.aggregate(pipeline)
for doc in result:
print(doc)
篇章五:MongoDB复制和分片
5.1 复制
复制用于提高数据的可用性和故障转移能力。
# 创建一个复制集
repl_set = client['myreplset']
repl_set.initiate([
{"_id": "rs0", "host": "localhost:27017"},
{"_id": "rs1", "host": "localhost:27018"},
{"_id": "rs2", "host": "localhost:27019"}
])
# 查看复制集状态
repl_set.status()
5.2 分片
分片用于处理大量数据和高性能读写。
# 创建一个分片集群
shard1 = {"_id": "shard1", "host": "localhost:27020"}
shard2 = {"_id": "shard2", "host": "localhost:27021"}
replica1 = {"_id": "replica1", "host": "localhost:27022"}
replica2 = {"_id": "replica2", "host": "localhost:27023"}
config = {
"_id": "configDB",
"members": [
{"_id": 1, "host": "localhost:27024"},
shard1,
shard2,
replica1,
replica2
]
}
# 启动分片集群
client.admin.command("addShard", shard1["host"])
client.admin.command("addShard", shard2["host"])
client.admin.command("addReplicaSet", config)
篇章六:实战技巧
6.1 查询优化
- 使用索引提高查询性能。
- 使用投影减少数据传输量。
6.2 数据迁移
- 使用
mongorestore和mongodump工具进行数据迁移。
6.3 性能监控
- 使用
mongostat和mongotop工具监控MongoDB性能。
通过以上学习,相信你已经对Python操作MongoDB有了更深入的了解。在实战中,多尝试、多思考,你将会成为一个熟练的MongoDB高手。祝你学习顺利!
