数据库增删改查语句

99 阅读2分钟

一、数据库增删改查(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 等约束保证字段的完整性。例如用户模型中 usernameemail 都设置了 unique 和 required,防止重复和缺失。

4. 问:如何实现分页查询?举例说明。

答:
分页查询常用于新闻列表等场景。我们通过 Mongoose 的 skiplimit 方法实现分页。例如:

const list = await NewsModel.find()
  .skip((page - 1) * pageSize)
  .limit(pageSize)
  .sort({ editTime: -1 });

这样可以高效地返回指定页的数据和总数。

5. 问:你们如何处理关联数据(如用户收藏、评论)?

答:
我们通过 MongoDB 的 ObjectId 实现数据关联。例如收藏表(CollectionModel)中有 userId 和 articleId 字段,分别引用用户和新闻。查询时可用 populate 方法自动填充关联对象,实现如“查询用户收藏的所有新闻”或“获取新闻的所有评论”等功能。