28 Node.js连接MongoDB

28 Node.js连接MongoDB

在本节中,我们将学习如何使用Node.js连接到MongoDB数据库。我们将通过简单的示例,逐步实现连接和基本操作。

环境准备

  1. 安装Node.js:确保你的系统中安装了Node.js。可以通过命令 node -v 检查版本。
  2. 安装MongoDB:确保你已经安装了MongoDB并运行在本地或使用云服务(如MongoDB Atlas)。
  3. 创建项目:创建一个新目录并初始化一个Node.js项目。
    1
    2
    3
    mkdir my-mongo-project
    cd my-mongo-project
    npm init -y
  4. 安装MongoDB驱动
    1
    npm install mongodb

连接MongoDB

下面是连接MongoDB的基本代码示例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
const { MongoClient } = require('mongodb');

// 替换为你的MongoDB连接字符串
const url = 'mongodb://localhost:27017';
const dbName = 'mydatabase';

async function main() {
const client = new MongoClient(url);

try {
// 连接到MongoDB
await client.connect();
console.log('连接到MongoDB成功');

// 选择数据库
const db = client.db(dbName);

// 在这里可以执行数据库操作
} catch (err) {
console.error('连接到MongoDB失败', err);
} finally {
// 关闭连接
await client.close();
}
}

main().catch(console.error);

代码解析

  • MongoClient: 从 mongodb 包中导入 MongoClient,用于建立数据库连接。
  • 连接字符串: 使用 mongodb://localhost:27017 连接到本地MongoDB实例。
  • async/await: 使用异步编程来处理连接和数据库操作,确保代码的可读性和简洁性。

数据库基本操作

通过连接成功后,我们可以进行基本的数据库操作,比如插入、查询和更新数据。

插入文档

插入一条文档到集合中:

1
2
3
4
5
6
7
8
9
10
async function insertDocument(db) {
const collection = db.collection('users');
const user = { name: 'Alice', age: 25 };

const result = await collection.insertOne(user);
console.log(`插入成功,文档 id: ${result.insertedId}`);
}

// 在main函数中调用
await insertDocument(db);

查询文档

查询集合中的文档:

1
2
3
4
5
6
7
8
9
async function findDocuments(db) {
const collection = db.collection('users');

const users = await collection.find({}).toArray();
console.log('找到的用户:', users);
}

// 在main函数中调用
await findDocuments(db);

更新文档

更新集合中的文档:

1
2
3
4
5
6
7
8
9
async function updateDocument(db) {
const collection = db.collection('users');
const result = await collection.updateOne({ name: 'Alice' }, { $set: { age: 26 } });

console.log(`更新成功,已修改文档数量: ${result.modifiedCount}`);
}

// 在main函数中调用
await updateDocument(db);

删除文档

删除集合中的文档:

1
2
3
4
5
6
7
8
9
async function deleteDocument(db) {
const collection = db.collection('users');
const result = await collection.deleteOne({ name: 'Alice' });

console.log(`删除成功,已删除文档数量: ${result.deletedCount}`);
}

// 在main函数中调用
await deleteDocument(db);

完整代码示例

将上述所有操作整合到 main 函数中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
async function main() {
const client = new MongoClient(url);

try {
await client.connect();
console.log('连接到MongoDB成功');
const db = client.db(dbName);

// 插入文档
await insertDocument(db);
// 查询文档
await findDocuments(db);
// 更新文档
await updateDocument(db);
// 删除文档
await deleteDocument(db);
} catch (err) {
console.error('操作失败', err);
} finally {
await client.close();
}
}

总结

在本节中,我们介绍了如何使用Node.js连接MongoDB实例,并执行基本的增、查、改、删操作。通过这些操作,你可以开始构建更复杂的应用程序,利用MongoDB的强大功能。

29 Node.js CRUD 操作基础教程

29 Node.js CRUD 操作基础教程

在本教程中,我们将学习如何使用 Node.js 实现基本的 CRUD(创建、读取、更新、删除)操作。我们将搭建一个简单的服务器并使用 Express 框架来处理 HTTP 请求。

环境准备

首先,确保你已经安装了 Node.js 和 npm。如果还未安装,可以在 Node.js 官网 下载并安装。

接下来,创建一个新的项目目录并初始化 npm:

1
2
3
mkdir node-crud-example
cd node-crud-example
npm init -y

然后安装 Express 框架:

1
npm install express

创建基本服务器

在项目根目录中创建一个 index.js 文件:

1
2
3
4
5
6
7
8
9
10
11
const express = require('express');
const app = express();
const PORT = 3000;

// 中间件
app.use(express.json());

// 启动服务器
app.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}`);
});

运行服务器:

1
node index.js

你应该在终端看到 Server is running on http://localhost:3000 的提示。

数据结构

为了演示 CRUD 操作,我们将使用一个简单的内存数据结构 items,它是一个数组,用于存储产品信息。每个产品将包含 idnameprice

1
let items = [];

创建(Create)

接下来,我们实现创建产品的功能。添加以下代码到 index.js 中:

1
2
3
4
5
6
7
// 创建产品
app.post('/items', (req, res) => {
const { name, price } = req.body;
const newItem = { id: items.length + 1, name, price };
items.push(newItem);
res.status(201).json(newItem);
});

测试创建

使用 Postman 或 cURL 来测试创建功能。

使用 cURL 示例:

1
curl -X POST http://localhost:3000/items -H "Content-Type: application/json" -d '{"name": "Apple", "price": 1.5}'

返回的响应应该类似于:

1
2
3
4
5
{
"id": 1,
"name": "Apple",
"price": 1.5
}

读取(Read)

我们将实现两个读取功能:获取所有产品和根据 ID 获取单个产品。

1
2
3
4
5
6
7
8
9
10
11
// 获取所有产品
app.get('/items', (req, res) => {
res.json(items);
});

// 根据 ID 获取产品
app.get('/items/:id', (req, res) => {
const item = items.find(i => i.id === parseInt(req.params.id));
if (!item) return res.status(404).send('Item not found');
res.json(item);
});

测试读取

获取所有产品:

1
curl http://localhost:3000/items

获取单个产品:

1
curl http://localhost:3000/items/1

返回的响应将是你请求的产品信息。

更新(Update)

现在我们来实现更新产品的信息。以下代码允许通过 ID 更新产品的 nameprice

1
2
3
4
5
6
7
8
9
10
11
// 更新产品
app.put('/items/:id', (req, res) => {
const item = items.find(i => i.id === parseInt(req.params.id));
if (!item) return res.status(404).send('Item not found');

const { name, price } = req.body;
item.name = name !== undefined ? name : item.name;
item.price = price !== undefined ? price : item.price;

res.json(item);
});

测试更新

使用 cURL 示例:

1
curl -X PUT http://localhost:3000/items/1 -H "Content-Type: application/json" -d '{"price": 2.0}'

返回的更新后的产品信息应如下所示:

1
2
3
4
5
{
"id": 1,
"name": "Apple",
"price": 2.0
}

删除(Delete)

最后,实现删除产品的功能:

1
2
3
4
5
6
7
8
// 删除产品
app.delete('/items/:id', (req, res) => {
const itemIndex = items.findIndex(i => i.id === parseInt(req.params.id));
if (itemIndex === -1) return res.status(404).send('Item not found');

const deletedItem = items.splice(itemIndex, 1);
res.json(deletedItem);
});

测试删除

使用 cURL 示例:

1
curl -X DELETE http://localhost:3000/items/1

返回的响应将是删除的产品信息。

总结

通过本文,我们实现了一个简单的 Node.js 服务器,这个服务器支持基本的 CRUD 操作。你可以使用 Postman 或 cURL 来测试每个操作。这个示例为你理解 Node.js 和 RESTful API 提供了一个良好的基础。

30 使用Mongoose进行数据建模

30 使用Mongoose进行数据建模

Mongoose简介

Mongoose是一个为MongoDB设计的对象数据建模库,它提供了简单的API来与MongoDB进行交互。通过Mongoose,你可以创建模型并使用这些模型对数据库进行CRUD(创建、读取、更新、删除)操作。

安装Mongoose

首先,你需要在你的Node.js项目中安装Mongoose。在项目根目录下运行以下命令:

1
npm install mongoose

连接MongoDB

在使用Mongoose之前,你需要先连接到MongoDB。以下是一个示例代码,演示如何连接到本地MongoDB实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost:27017/mydatabase', {
useNewUrlParser: true,
useUnifiedTopology: true,
});

const db = mongoose.connection;

db.on('error', console.error.bind(console, '连接错误:'));
db.once('open', () => {
console.log('数据库连接成功');
});

定义数据模型

接下来,我们需要定义一个数据模型。假设我们要创建一个User模型,它具有nameemailage字段。以下是如何定义这个模型的示例:

1
2
3
4
5
6
7
const userSchema = new mongoose.Schema({
name: { type: String, required: true },
email: { type: String, required: true, unique: true },
age: { type: Number, min: 0, max: 120 }
});

const User = mongoose.model('User', userSchema);

在上述代码中,我们使用mongoose.Schema定义了一个名为userSchema的架构,并指定了各字段的类型和验证规则。接着,使用mongoose.model方法创建User模型。

创建文档

使用定义的模型,我们可以创建新的用户文档。以下是一个示例:

1
2
3
4
5
6
7
8
9
10
const newUser = new User({
name: 'Alice',
email: 'alice@example.com',
age: 30
});

newUser.save((err) => {
if (err) return console.error(err);
console.log('用户创建成功');
});

在上面的代码中,通过User模型创建了一个新的用户实例,并使用save()方法将其保存到数据库中。

查询文档

你可以使用Mongoose提供的查询方法来检索数据。以下是一个查询文档的示例:

1
2
3
4
User.find({ age: { $gte: 18 } }, (err, users) => {
if (err) return console.error(err);
console.log('成年人用户:', users);
});

这里使用find()方法查询年龄大于或等于18岁的用户,并打印结果。

更新文档

你可以使用MongooseupdateOneupdateMany方法来更新文档。以下是一个更新文档的示例:

1
2
3
4
User.updateOne({ name: 'Alice' }, { age: 31 }, (err) => {
if (err) return console.error(err);
console.log('用户年龄更新成功');
});

在上面的代码中,我们将名为Alice的用户的年龄更新为31岁。

删除文档

删除文档使用removedeleteOne方法。例如,以下代码展示了如何删除一名用户:

1
2
3
4
User.deleteOne({ name: 'Alice' }, (err) => {
if (err) return console.error(err);
console.log('用户已删除');
});

在此示例中,我们通过deleteOne方法根据用户姓名删除一名用户。

结论

通过使用Mongoose,你可以轻松地对MongoDB进行数据建模和操作。通过定义数据模型、执行CRUD操作,你可以高效地管理应用程序的数据。

如需深入了解Mongoose的进阶用法,建议参考官方文档以获取更多详细信息和示例。