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

#牛客AI配图神器#

全部评论

相关推荐

只因飞飞:今日首绷
点赞 评论 收藏
分享
迷茫的大四🐶:那你问他上班之后老实了没
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务