操作数据库

数据库连接

步骤 1:安装 Mongoose

首先,我们需要安装 Mongoose,这是一个 MongoDB 对象数据建模(ODM)库,用于在 MongoDB 和 Node.js 应用程序代码之间无缝转换数据。

1pnpm add mongoose

步骤 2:创建数据库连接模块

接下来,我们将创建一个模块来管理数据库的连接。这个模块将负责建立与 MongoDB 的连接,并处理连接成功或失败的情况。

1// 这个模块负责管理数据库的连接。
2const mongoose = require("mongoose")
3const {
4	MONGO_USERNAME,
5	MONGO_PASSWORD,
6	MONGO_HOST,
7	MONGO_PORT,
8	MONGO_DATABASE,
9} = require("../env/index.js")
10
11// 导出一个函数,用于连接数据库
12module.exports = () => {
13	// 连接到 MongoDB 数据库
14	mongoose
15		.connect(
16			`mongodb://${MONGO_USERNAME}:${MONGO_PASSWORD}@${MONGO_HOST}:${MONGO_PORT}/${MONGO_DATABASE}`,
17			{
18				useNewUrlParser: true,
19				useUnifiedTopology: true,
20			}
21		)
22		.then(() => {
23			console.log("Connected to MongoDB successfully")
24		})
25		.catch((err) => {
26			console.error("Failed to connect to MongoDB:", err)
27			process.exit(1)
28		})
29}

步骤 3:在应用中连接数据库

最后,我们将在应用启动时调用数据库连接函数,并启动 Koa 服务器。

1const { APP_PORT } = require("./env/index.js")
2const app = require("./app/index.js")
3const MongoConnect = require("./db/index.js") // [!code focus]
4
5// 连接数据库
6MongoConnect() // [!code focus]
7
8app.listen(APP_PORT, () => {
9	console.log(`Server is running at http://localhost:${APP_PORT}`)
10})

创建模型对象

在 Mongoose 中,模型对象(Model)是一个 JavaScript 对象,它表示 MongoDB 中的一个集合(Collection),并且与特定的 MongoDB 集合相关联。模型对象定义了如何将数据映射到 MongoDB 的文档(Document)上,并且提供了一些方法来操作这些文档。

以下是如何定义和使用 Mongoose 模型对象的基本步骤:

步骤 1:定义模式(Schema)

在定义模型之前,我们首先需要定义一个模式(Schema),它描述了数据的结构和验证规则。

1const mongoose = require("mongoose")
2const Schema = mongoose.Schema
3
4const userSchema = new Schema({
5	name: String,
6	age: Number,
7	gender: String,
8	hobby: String,
9})

步骤 2:创建模型(Model)

使用定义好的模式来创建一个模型对象。

1// 创建模型对象
2const User = mongoose.model('User', userSchema);
3
4// 抛出模型对象
5module.exports = User

步骤 3:使用模型操作数据

一旦模型被创建,我们就可以使用它来创建、查询、更新和删除文档。

1// 创建一个新的文档
2const newUser = new User({
3  name: 'John Doe',
4  email: 'john.doe@example.com',
5  age: 30,
6});
7
8// 保存文档到数据库
9newUser.save((err, savedUser) => {
10  if (err) return console.error(err);
11  console.log('User saved:', savedUser);
12});
13
14// 查询文档
15User.find({ name: 'John Doe' }, (err, users) => {
16  if (err) return console.error(err);
17  console.log('Users found:', users);
18});
19
20// 更新文档
21User.updateOne({ name: 'John Doe' }, { age: 31 }, (err, result) => {
22  if (err) return console.error(err);
23  console.log('User updated:', result);
24});
25
26// 删除文档
27User.deleteOne({ name: 'John Doe' }, (err, result) => {
28  if (err) return console.error(err);
29  console.log('User deleted:', result);
30});