一、数据库增删改查(CRUD)语句举例
本项目后端基于 Node.js + Mongoose(MongoDB),以用户、产品、新闻为例,常见的 CRUD 操作为:
1. 新增(Create)
// 新增用户
await UserModel.create({
username,
introduction,
gender,
avatar,
password,
role,
});
// 新增产品
await ProductModel.create({
title,
introduction,
detail,
cover,
editTime,
});
2. 查询(Read)
// 查询所有用户
await UserModel.find({}, ['username', 'role', 'avatar', 'introduction', 'gender']);
// 查询单个产品
await ProductModel.find({ _id });
3. 更新(Update)
// 更新用户信息
await UserModel.updateOne(
{ _id },
{ username, introduction, gender, avatar }
);
// 更新产品信息
await ProductModel.updateOne(
{ _id },
{ title, introduction, detail, cover, editTime }
);
4. 删除(Delete)
// 删除用户
await UserModel.deleteOne({ _id });
// 删除产品
await ProductModel.deleteOne({ _id });
二、问题
1. 问:你们项目的数据库是如何设计和操作的?
答:
我们项目采用 MongoDB 作为数据库,使用 Mongoose 进行建模和操作。每个业务对象(如用户、产品、新闻)都有独立的 Model 和 Service 层,Service 层封装了常用的增删改查方法,Controller 层负责接收前端请求并调用 Service 层实现具体业务逻辑。
2. 问:如何实现用户的增删改查?举例说明。
答:
以用户为例,UserService 封装了 create、find、updateOne、deleteOne 等方法。比如新增用户用 UserModel.create(),查询用 UserModel.find(),更新用 UserModel.updateOne(),删除用 UserModel.deleteOne()。Controller 层接收参数后调用这些方法,实现完整的用户管理功能。
3. 问:你们如何保证数据的唯一性和完整性?
答:
在 Mongoose Schema 层面设置了唯一索引(如用户名、邮箱),并通过 required、enum、minlength、maxlength 等约束保证字段的完整性。例如用户模型中 username 和 email 都设置了 unique 和 required,防止重复和缺失。
4. 问:如何实现分页查询?举例说明。
答:
分页查询常用于新闻列表等场景。我们通过 Mongoose 的 skip 和 limit 方法实现分页。例如:
const list = await NewsModel.find()
.skip((page - 1) * pageSize)
.limit(pageSize)
.sort({ editTime: -1 });
这样可以高效地返回指定页的数据和总数。
5. 问:你们如何处理关联数据(如用户收藏、评论)?
答:
我们通过 MongoDB 的 ObjectId 实现数据关联。例如收藏表(CollectionModel)中有 userId 和 articleId 字段,分别引用用户和新闻。查询时可用 populate 方法自动填充关联对象,实现如“查询用户收藏的所有新闻”或“获取新闻的所有评论”等功能。