高效使用 PyMongo 进行 MongoDB 查询和插入操作


高效使用 PyMongo 进行 MongoDB 查询和插入操作需要考虑以下几个方面:连接管理、查询优化、批量操作、索引使用等。下面是一些最佳实践和示例代码。

1. 安装 PyMongo

首先,确保你已经安装了 PyMongo:

pip install pymongo

2. 连接到 MongoDB

使用 MongoClient 连接到 MongoDB。建议使用连接池来管理连接,以提高效率。

from pymongo import MongoClient

# 建立连接
client = MongoClient('mongodb://localhost:27017')

# 选择数据库和集合
db = client.my_database
collection = db.my_collection

3. 插入操作

单条插入

插入单条文档可以使用 insert_one 方法:

document = {
    "name": "Alice",
    "age": 30,
    "address": "123 Main St"
}
collection.insert_one(document)

批量插入

批量插入可以使用 insert_many 方法,效率更高:

documents = [
    {"name": "Bob", "age": 25, "address": "456 Elm St"},
    {"name": "Charlie", "age": 35, "address": "789 Oak St"}
]
collection.insert_many(documents)

4. 查询操作

简单查询

使用 find_onefind 方法进行查询:

# 查询单条文档
result = collection.find_one({"name": "Alice"})
print(result)

# 查询多条文档
results = collection.find({"age": {"$gt": 20}})
for doc in results:
    print(doc)

查询优化

  1. 使用索引:确保对查询字段建立索引,提高查询速度。
# 对"name"字段建立索引
collection.create_index("name")
  1. 投影:只返回需要的字段,减少数据传输量。
# 只返回"name"和"address"字段
results = collection.find({"age": {"$gt": 20}}, {"name": 1, "address": 1})
  1. 分页查询:使用 skiplimit 实现分页。
# 分页查询,每页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)

5. 批量更新和删除

批量更新

使用 update_many 方法:

collection.update_many(
    {"age": {"$lt": 30}},
    {"$set": {"status": "young"}}
)

批量删除

使用 delete_many 方法:

collection.delete_many({"status": "inactive"})

6. 异常处理

使用 try-except 块处理操作中的异常:

try:
    collection.insert_one({"_id": 1, "name": "Test"})
except pymongo.errors.DuplicateKeyError:
    print("Document with the same _id already exists")

7. 连接池配置

配置连接池参数,如最大连接数、等待队列等,确保高并发场景下的性能。

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