MongoDb(②pymongo)

发布于:2025-09-03 ⋅ 阅读:(19) ⋅ 点赞:(0)

一:连接 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 中创建了 mydatausers 这两个数据库,那么 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


网站公告

今日签到

点亮在社区的每一天
去签到