# 文件内容分析
该文件为一张图片,图片内容是一个评分表格,主要展示了某项实验或课程设计的评分指标及得分情况。表格中列出了各项考核内容及其分值比例,部分项目有对应的得分(百分制)。从内容来看,这是一份关于 MongoDB 数据库相关实验的评分表。
---
## 问题回应:这个实验怎么做?内容要求如下:
1. 至少5页内容(不加前两页)
2. 字数不少于1500字(含代码)‼️
3. 两个实验都要求描述 MongoDB
---
### 题目重述
请根据提供的评分指标完成一份符合以下要求的实验报告:
- 内容不少于5页(不含封面和目录)
- 总文字量不少于1500字(包括代码)
- 涉及两个实验,均需描述 MongoDB 的设计与实现
- 实验内容应涵盖:数据库设计、增删改查、索引创建、业务功能实现等
---
### 详解
为了满足评分标准并达到内容要求,建议将实验报告分为**两个独立实验模块**,每个模块围绕 MongoDB 展开完整的设计与开发流程。以下是具体写作结构与内容建议:
#### **实验一:基于 MongoDB 的学生信息管理系统**
##### 1. 概念模型设计
使用实体-关系模型(ER Model)设计系统核心实体:`Student`、`Course`、`Enrollment`。
例如:
- `Student(stu_id, name, age, major)`
- `Course(course_id, title, credits)`
- `Enrollment(stu_id, course_id, grade)`
MongoDB 是文档型数据库,适合嵌套结构存储。可将选课记录以数组形式嵌入学生文档中。
##### 2. 逻辑与物理模型设计
在 MongoDB 中,集合(Collection)对应传统表,文档(Document)为数据单位。
```json
// students 集合示例
{
"_id": "S001",
"name": "张三",
"age": 20,
"major": "计算机科学",
"enrollments": [
{ "course_id": "CSE101", "title": "数据库原理", "grade": 88 },
{ "course_id": "CSE102", "title": "Web开发", "grade": 92 }
]
}
```
此设计体现 MongoDB 的灵活模式优势——无需固定字段。
##### 3. 添加业务功能
使用 Python + PyMongo 实现插入操作:
```python
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client['school_db']
students = db['students']
def add_student(stu_id, name, age, major):
student = {
"_id": stu_id,
"name": name,
"age": age,
"major": major,
"enrollments": []
}
result = students.insert_one(student)
print(f"新增学生: {result.inserted_id}")
```
##### 4. 更新业务功能
更新学生专业或添加选课记录:
```python
def update_major(stu_id, new_major):
students.update_one(
{"_id": stu_id},
{"$set": {"major": new_major}}
)
def enroll_course(stu_id, course_info):
students.update_one(
{"_id": stu_id},
{"$push": {"enrollments": course_info}}
)
```
##### 5. 删除业务功能
删除指定学生:
```python
def delete_student(stu_id):
result = students.delete_one({"_id": stu_id})
if result.deleted_count > 0:
print("删除成功")
```
##### 6. 查询业务功能
查找某专业的所有学生:
```python
def find_by_major(major):
cursor = students.find({"major": major})
for s in cursor:
print(s)
```
##### 7. 创建索引功能
提升查询效率,如对学生姓名建立索引:
```python
students.create_index([("name", 1)])
print("已创建姓名升序索引")
```
---
#### **实验二:电商商品库存管理系统(MongoDB 文档嵌套应用)**
##### 1. 模型设计思想
电商平台商品常具有多规格属性(颜色、尺寸),传统关系数据库需多表连接,而 MongoDB 可直接用嵌套文档表达:
```json
{
"_id": "P001",
"name": "T恤",
"category": "服装",
"variants": [
{ "color": "红色", "size": "L", "stock": 50, "price": 99.9 },
{ "color": "蓝色", "size": "M", "stock": 30, "price": 99.9 }
]
}
```
##### 2. 添加商品功能
支持多种变体一次性录入:
```python
products = db['products']
def add_product(pid, name, category, variants):
product = {
"_id": pid,
"name": name,
"category": category,
"variants": variants
}
products.insert_one(product)
```
##### 3. 查询与筛选
查找库存低于某个阈值的商品:
```python
def low_stock(threshold=10):
result = products.find({
"variants": {
"$elemMatch": { "stock": { "$lt": threshold } }
}
})
for p in result:
print(p)
```
##### 4. 更新库存
销售后减少库存:
```python
def reduce_stock(pid, color, size, qty):
products.update_one(
{"_id": pid, "variants.color": color, "variants.size": size},
{"$inc": {"variants.$.stock": -qty}}
)
```
##### 5. 创建复合索引
加快按类别和名称搜索的速度:
```python
products.create_index([("category", 1), ("name", 1)])
```
---
#### **实验报告撰写建议**
| 结构 | 内容说明 | 字数估算 |
|------|--------|---------|
| 引言 | 介绍 MongoDB 特性与适用场景 | 200字 |
| 实验目标 | 明确实验目的与任务 | 150字 |
| 实验环境 | 列出 MongoDB、Python、PyMongo 版本 | 100字 |
| 实验一详细描述 | 包括设计、代码、截图说明 | 600字 |
| 实验二详细描述 | 同上 | 600字 |
| 总结 | 对比两种模型设计优劣 | 200字 |
| 参考文献 | 列出官方文档链接等 | 50字 |
> ✅ 总字数轻松超过1500字,且内容充实;排版后自然达到5页以上(正文部分)
---
### 知识点
1. **MongoDB 文档模型设计**
使用 BSON 格式存储结构化与半结构化数据,支持嵌套文档与数组,适用于复杂对象建模。
2. **PyMongo 基本操作**
提供 insert、update、delete、find 接口,通过 Python 操作 MongoDB 实现 CRUD 功能。
3. **MongoDB 索引机制**
支持单字段、复合、多键索引,提高查询性能,避免全集合扫描。