Python3玩转MongoDB全攻略
Python3 MongoDB 使用指南
安装与连接
确保已安装Python3和MongoDB。使用pip安装PyMongo驱动:
pip install pymongo
建立与MongoDB的连接:
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017/')
db = client['example_db'] # 选择数据库
collection = db['example_collection'] # 选择集合
基本CRUD操作
插入文档:
document = {"name": "Alice", "age": 25, "city": "New York"}
insert_result = collection.insert_one(document)
print(insert_result.inserted_id)
查询文档:
find_result = collection.find({"age": {"$gt": 20}})
for doc in find_result:
print(doc)
更新文档:
update_result = collection.update_one(
{"name": "Alice"},
{"$set": {"age": 26}}
)
print(update_result.modified_count)
删除文档:
delete_result = collection.delete_one({"name": "Alice"})
print(delete_result.deleted_count)
高级查询技巧
使用聚合管道:
pipeline = [
{"$match": {"age": {"$gt": 20}}},
{"$group": {"_id": "$city", "count": {"$sum": 1}}}
]
agg_result = collection.aggregate(pipeline)
for doc in agg_result:
print(doc)
创建索引提升查询性能:
collection.create_index([("name", pymongo.ASCENDING)])
事务处理
MongoDB 4.0+支持多文档事务:
with client.start_session() as session:
with session.start_transaction():
collection.insert_one({"name": "Bob"}, session=session)
collection.update_one(
{"name": "Alice"},
{"$set": {"status": "updated"}},
session=session
)
性能优化
批量插入代替单条插入:
documents = [{"name": f"User{i}"} for i in range(1000)]
collection.insert_many(documents)
使用投影减少返回数据量:
collection.find({"age": {"$gt": 20}}, {"name": 1, "_id": 0})
安全实践
启用身份验证:
client = MongoClient(
'mongodb://username:password@localhost:27017/',
authSource='admin'
)
使用SSL加密连接:
client = MongoClient(
'mongodb://localhost:27017/',
ssl=True,
ssl_cert_reqs=ssl.CERT_NONE
)
错误处理
实现健壮的错误处理机制:
try:
collection.insert_one({"invalid": "data"})
except pymongo.errors.DuplicateKeyError:
print("Duplicate key error")
except pymongo.errors.OperationFailure as e:
print(f"Operation failed: {e.details}")
监控与维护
获取集合统计信息:
stats = collection.stats()
print(f"文档数量: {stats['count']}")
print(f"存储大小: {stats['size']} bytes")
定期执行压缩操作:
db.command("compact", "example_collection")
BbS.okapop061.sbs/PoSt/1122_545511.HtM
BbS.okapop062.sbs/PoSt/1122_717308.HtM
BbS.okapop063.sbs/PoSt/1122_998918.HtM
BbS.okapop065.sbs/PoSt/1122_423291.HtM
BbS.okapop066.sbs/PoSt/1122_464898.HtM
BbS.okapop067.sbs/PoSt/1122_472412.HtM
BbS.okapop068.sbs/PoSt/1122_303006.HtM
BbS.okapop069.sbs/PoSt/1122_730779.HtM
BbS.okapop070.sbs/PoSt/1122_648001.HtM
BbS.okapop071.sbs/PoSt/1122_031943.HtM
BbS.okapop061.sbs/PoSt/1122_847169.HtM
BbS.okapop062.sbs/PoSt/1122_512867.HtM
BbS.okapop063.sbs/PoSt/1122_355679.HtM
BbS.okapop065.sbs/PoSt/1122_947946.HtM
BbS.okapop066.sbs/PoSt/1122_005691.HtM
BbS.okapop067.sbs/PoSt/1122_567324.HtM
BbS.okapop068.sbs/PoSt/1122_864669.HtM
BbS.okapop069.sbs/PoSt/1122_474779.HtM
BbS.okapop070.sbs/PoSt/1122_081491.HtM
BbS.okapop071.sbs/PoSt/1122_121020.HtM
BbS.okapop061.sbs/PoSt/1122_277198.HtM
BbS.okapop062.sbs/PoSt/1122_375555.HtM
BbS.okapop063.sbs/PoSt/1122_567159.HtM
BbS.okapop065.sbs/PoSt/1122_212529.HtM
BbS.okapop066.sbs/PoSt/1122_903618.HtM
BbS.okapop067.sbs/PoSt/1122_632791.HtM
BbS.okapop068.sbs/PoSt/1122_491673.HtM
BbS.okapop069.sbs/PoSt/1122_142195.HtM
BbS.okapop070.sbs/PoSt/1122_816621.HtM
BbS.okapop071.sbs/PoSt/1122_916548.HtM
BbS.okapop061.sbs/PoSt/1122_532722.HtM
BbS.okapop062.sbs/PoSt/1122_668839.HtM
BbS.okapop063.sbs/PoSt/1122_236917.HtM
BbS.okapop065.sbs/PoSt/1122_034984.HtM
BbS.okapop066.sbs/PoSt/1122_606016.HtM
BbS.okapop067.sbs/PoSt/1122_516870.HtM
BbS.okapop068.sbs/PoSt/1122_956864.HtM
BbS.okapop069.sbs/PoSt/1122_320287.HtM
BbS.okapop070.sbs/PoSt/1122_546546.HtM
BbS.okapop071.sbs/PoSt/1122_974752.HtM
BbS.okapop061.sbs/PoSt/1122_583906.HtM
BbS.okapop062.sbs/PoSt/1122_405349.HtM
BbS.okapop063.sbs/PoSt/1122_986995.HtM
BbS.okapop065.sbs/PoSt/1122_822317.HtM
BbS.okapop066.sbs/PoSt/1122_029722.HtM
BbS.okapop067.sbs/PoSt/1122_532085.HtM
BbS.okapop068.sbs/PoSt/1122_907743.HtM
BbS.okapop069.sbs/PoSt/1122_715609.HtM
BbS.okapop070.sbs/PoSt/1122_047603.HtM
BbS.okapop071.sbs/PoSt/1122_364899.HtM
BbS.okapop061.sbs/PoSt/1122_923941.HtM
BbS.okapop062.sbs/PoSt/1122_180543.HtM
BbS.okapop063.sbs/PoSt/1122_687324.HtM
BbS.okapop065.sbs/PoSt/1122_060215.HtM
BbS.okapop066.sbs/PoSt/1122_018693.HtM
BbS.okapop067.sbs/PoSt/1122_243753.HtM
BbS.okapop068.sbs/PoSt/1122_225475.HtM
BbS.okapop069.sbs/PoSt/1122_230950.HtM
BbS.okapop070.sbs/PoSt/1122_717559.HtM
BbS.okapop071.sbs/PoSt/1122_134460.HtM
BbS.okapop072.sbs/PoSt/1122_166668.HtM
BbS.okapop073.sbs/PoSt/1122_630227.HtM
BbS.okapop074.sbs/PoSt/1122_474964.HtM
BbS.okapop075.sbs/PoSt/1122_982090.HtM
BbS.okapop076.sbs/PoSt/1122_156499.HtM
BbS.okapop077.sbs/PoSt/1122_460606.HtM
BbS.okapop078.sbs/PoSt/1122_323148.HtM
BbS.okapop079.sbs/PoSt/1122_939081.HtM
BbS.okapop080.sbs/PoSt/1122_684259.HtM
BbS.okapop081.sbs/PoSt/1122_561320.HtM
BbS.okapop072.sbs/PoSt/1122_917796.HtM
BbS.okapop073.sbs/PoSt/1122_725181.HtM
BbS.okapop074.sbs/PoSt/1122_361053.HtM
BbS.okapop075.sbs/PoSt/1122_911354.HtM
BbS.okapop076.sbs/PoSt/1122_650556.HtM
BbS.okapop077.sbs/PoSt/1122_400465.HtM
BbS.okapop078.sbs/PoSt/1122_451842.HtM
BbS.okapop079.sbs/PoSt/1122_895109.HtM
BbS.okapop080.sbs/PoSt/1122_132533.HtM
BbS.okapop081.sbs/PoSt/1122_204472.HtM
