一:连接 MongoDB
# 1. 先安装pymongo(如果没安装)
# 打开命令行执行:pip install pymongo -i https://mirrors.aliyun.com/pypi/simple/
# 2. 导入pymongo的MongoClient
from pymongo import MongoClient
# 3. 连接本地MongoDB(默认地址是localhost:27017)
client = MongoClient('mongodb://localhost:27017/')
# 4. 测试连接是否成功
try:
# 尝试获取数据库列表,能获取到说明连接成功
client.list_database_names()
print(client.list_database_names())
print("连接MongoDB成功!")
except Exception as e:
print("连接失败:", e)
finally:
# 用完后关闭连接
client.close()
client.list_database_names()
返回的结果是一个 列表 (list),列表中包含了您连接的 MongoDB 服务器上的所有数据库的名称。
例如,如果您在 MongoDB 中创建了 mydata
和 users
这两个数据库,那么 client.list_database_names()
可能会返回类似下面这样的结果:
['admin', 'config', 'local', 'mydata', 'users']
二:选择 / 创建数据库和集合
MongoDB 不需要提前创建数据库和集合,使用时直接指定即可。
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017/')
# 1. 选择或创建数据库(如果不存在,插入数据时会自动创建)
db = client['mydb'] # 数据库名:mydb
print("当前数据库:", db.name)
# 2. 选择或创建集合(类似表格,不存在则自动创建)
collection = db['students'] # 集合名:students
print("当前集合:", collection.name)
client.close()
三:插入数据(单条)
向集合中插入一条文档(类似一行数据,格式是字典)。
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017/')
db = client['mydb']
collection = db['students']
# 准备一条数据(字典格式,类似JSON)
student = {
"name": "小明",
"age": 18,
"gender": "男",
"score": 90
}
# 插入单条数据
result = collection.insert_one(student)
# 打印插入结果(获取自动生成的ID)
print("插入成功,数据ID:", result.inserted_id)
client.close()
插入的字典会自动添加一个 _id 字段(唯一标识,类似主键)
insert_one() 的返回值可以获取插入数据的 ID
四:插入数据(多条)
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017/')
db = client['mydb']
collection = db['students']
# 准备多条数据(列表包含多个字典)
students = [
{"name": "小红", "age": 17, "gender": "女", "score": 95},
{"name": "小刚", "age": 19, "gender": "男", "score": 85},
{"name": "小丽", "age": 18, "gender": "女", "score": 92}
]
# 插入多条数据
result = collection.insert_many(students)
# 打印所有插入数据的ID
print("插入成功,多条数据ID:", result.inserted_ids)
client.close()
用列表 [] 包含多个字典,传给 insert_many()
返回的 inserted_ids 是一个列表,包含所有插入数据的 ID
五:查询数据(基础查询)
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017/')
db = client['mydb']
collection = db['students']
# 1. 查询单条数据(find_one(),默认返回第一条)
first_student = collection.find_one()
print("第一条数据:", first_student)
# 2. 条件查询单条(找name=小红的数据)
xiaohong = collection.find_one({"name": "小红"})
print("小红的数据:", xiaohong)
# 3. 查询多条数据(find(),返回所有符合条件的数据)
# 查所有数据
all_students = list(collection.find()) # 转成列表方便查看
print("\n所有学生:", all_students)
# 条件查询多条(查gender=女的数据)
girls = list(collection.find({"gender": "女"}))
print("女生数据:", girls)
client.close()
六:查询数据(高级筛选)
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017/')
db = client['mydb']
collection = db['students']
# 1. 筛选显示的字段(只看name和score,不显示_id)
# 格式:{字段名: 1(显示)或 0(不显示)},_id默认显示,需要手动隐藏
filtered = list(collection.find(
{"gender": "女"}, # 条件:女生
{"name": 1, "score": 1, "_id": 0} # 只显示name和score
))
print("女生的姓名和成绩:", filtered)
# 2. 条件符查询(查score>90的学生,$gt表示大于)
high_score = list(collection.find(
{"score": {"$gt": 90}} # 分数大于90
))
print("\n分数大于90的学生:", high_score)
# 3. 排序(按age升序,1=升序,-1=降序)
sorted_by_age = list(collection.find().sort("age", 1))
print("\n按年龄升序排列:", sorted_by_age)
client.close()
七:更新数据
修改已存在的数据。
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017/')
db = client['mydb']
collection = db['students']
# 1. 更新单条数据(将小明的age改为19)
# 格式:update_one(条件, {"$set": {要更新的字段}})
result = collection.update_one(
{"name": "小明"}, # 条件:找到name=小明
{"$set": {"age": 19, "score": 92}} # 要更新的字段:年龄和分数
)
print(f"更新单条:匹配到{result.matched_count}条,修改了{result.modified_count}条")
# 2. 更新多条数据(将所有女生的score加5分,$inc表示增加)
result = collection.update_many(
{"gender": "女"}, # 条件:女生
{"$inc": {"score": 5}} # 分数+5
)
print(f"更新多条:匹配到{result.matched_count}条,修改了{result.modified_count}条")
client.close()
$set:设置字段值(覆盖旧值)
$inc:对数值字段进行增减(如 {"$inc": {"age": 1}} 表示年龄 + 1)
八:删除数据
删除不需要的数据。
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017/')
db = client['mydb']
collection = db['students']
# 1. 删除单条数据(删除name=小刚的数据)
result = collection.delete_one({"name": "小刚"})
print(f"删除单条:删除了{result.deleted_count}条")
# 2. 删除多条数据(删除score<90的学生)
result = collection.delete_many({"score": {"$lt": 90}})
print(f"删除多条:删除了{result.deleted_count}条")
client.close()
123