高效使用 PyMongo 进行 MongoDB 查询和插入操作需要考虑以下几个方面:连接管理、查询优化、批量操作、索引使用等。下面是一些最佳实践和示例代码。
首先,确保你已经安装了 PyMongo:
pip install pymongo
使用 MongoClient 连接到 MongoDB。建议使用连接池来管理连接,以提高效率。
MongoClient
from pymongo import MongoClient # 建立连接 client = MongoClient('mongodb://localhost:27017') # 选择数据库和集合 db = client.my_database collection = db.my_collection
插入单条文档可以使用 insert_one 方法:
insert_one
document = { "name": "Alice", "age": 30, "address": "123 Main St" } collection.insert_one(document)
批量插入可以使用 insert_many 方法,效率更高:
insert_many
documents = [ {"name": "Bob", "age": 25, "address": "456 Elm St"}, {"name": "Charlie", "age": 35, "address": "789 Oak St"} ] collection.insert_many(documents)
使用 find_one 和 find 方法进行查询:
find_one
find
# 查询单条文档 result = collection.find_one({"name": "Alice"}) print(result) # 查询多条文档 results = collection.find({"age": {"$gt": 20}}) for doc in results: print(doc)
# 对"name"字段建立索引 collection.create_index("name")
# 只返回"name"和"address"字段 results = collection.find({"age": {"$gt": 20}}, {"name": 1, "address": 1})
skip
limit
# 分页查询,每页10条记录 page_number = 1 page_size = 10 results = collection.find().skip((page_number - 1) * page_size).limit(page_size) for doc in results: print(doc)
使用 update_many 方法:
update_many
collection.update_many( {"age": {"$lt": 30}}, {"$set": {"status": "young"}} )
使用 delete_many 方法:
delete_many
collection.delete_many({"status": "inactive"})
使用 try-except 块处理操作中的异常:
try: collection.insert_one({"_id": 1, "name": "Test"}) except pymongo.errors.DuplicateKeyError: print("Document with the same _id already exists")
配置连接池参数,如最大连接数、等待队列等,确保高并发场景下的性能。
client = MongoClient( 'mongodb://localhost:27017', maxPoolSize=100, waitQueueTimeoutMS=1000 )
以下是一个完整的示例代码,包含连接、插入、查询、更新、删除操作:
from pymongo import MongoClient # 连接到 MongoDB client = MongoClient('mongodb://localhost:27017') db = client.my_database collection = db.my_collection # 插入操作 document = {"name": "Alice", "age": 30, "address": "123 Main St"} collection.insert_one(document) # 批量插入 documents = [ {"name": "Bob", "age": 25, "address": "456 Elm St"}, {"name": "Charlie", "age": 35, "address": "789 Oak St"} ] collection.insert_many(documents) # 查询操作 result = collection.find_one({"name": "Alice"}) print(result) results = collection.find({"age": {"$gt": 20}}) for doc in results: print(doc) # 更新操作 collection.update_many({"age": {"$lt": 30}}, {"$set": {"status": "young"}}) # 删除操作 collection.delete_many({"status": "inactive"}) # 创建索引 collection.create_index("name")
通过上述最佳实践和示例代码,你可以有效地使用 PyMongo 进行 MongoDB 查询和插入操作。
原文链接:codingdict.net