NoSQL 数据库(MongoDB)
1. 简介
1.1 什么是 NoSQL 数据库?
NoSQL(Not Only SQL)数据库是一种非关系型数据库,它不使用传统的表格结构来存储数据,而是使用各种不同的数据模型,如文档、键值对、列族和图形等。NoSQL 数据库通常用于处理大量数据和高并发访问的场景。
1.2 MongoDB 概述
MongoDB 是一个开源的、基于文档的 NoSQL 数据库。它使用 JSON 格式的文档来存储数据,支持动态查询、索引、复制和分片等功能。MongoDB 非常适合用于处理结构化和半结构化数据。
2. 安装和配置 MongoDB
2.1 安装 MongoDB
在开始使用 MongoDB 之前,首先需要在你的系统上安装 MongoDB。以下是安装步骤:
2.1.1 在 macOS 上安装 MongoDB
brew install mongodb-community
2.1.2 在 Ubuntu 上安装 MongoDB
sudo apt-get install -y mongodb
2.2 启动 MongoDB 服务
安装完成后,启动 MongoDB 服务:
sudo systemctl start mongodb
2.3 配置 MongoDB
MongoDB 的配置文件通常位于 /etc/mongod.conf。你可以根据需要修改配置文件,例如设置数据存储路径、绑定 IP 地址等。
3. 使用 MongoDB 的 Node.js 驱动
3.1 安装 MongoDB Node.js 驱动
在 Node.js 项目中使用 MongoDB,首先需要安装 MongoDB 的 Node.js 驱动:
npm install mongodb
3.2 连接到 MongoDB
使用 MongoDB 驱动连接到数据库:
const { MongoClient } = require('mongodb');
const uri = 'mongodb://localhost:27017';
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
async function connect() {
try {
await client.connect();
console.log('Connected to MongoDB');
} catch (err) {
console.error('Error connecting to MongoDB:', err);
}
}
connect();
3.3 创建数据库和集合
连接成功后,可以创建数据库和集合:
const db = client.db('mydatabase');
const collection = db.collection('mycollection');
3.4 插入文档
向集合中插入文档:
const document = { name: 'John Doe', age: 30 };
const result = await collection.insertOne(document);
console.log('Document inserted with id:', result.insertedId);
3.5 查询文档
从集合中查询文档:
const query = { name: 'John Doe' };
const documents = await collection.find(query).toArray();
console.log('Found documents:', documents);
3.6 更新文档
更新集合中的文档:
const filter = { name: 'John Doe' };
const update = { $set: { age: 31 } };
const result = await collection.updateOne(filter, update);
console.log('Documents updated:', result.modifiedCount);
3.7 删除文档
从集合中删除文档:
const filter = { name: 'John Doe' };
const result = await collection.deleteOne(filter);
console.log('Documents deleted:', result.deletedCount);
4. 实践练习
4.1 创建一个简单的博客系统
使用 MongoDB 和 Node.js 创建一个简单的博客系统,包含以下功能:
- 用户注册和登录
- 创建、编辑和删除博客文章
- 查看博客文章列表
4.2 代码示例
以下是一个简单的博客系统示例代码:
const express = require('express');
const { MongoClient } = require('mongodb');
const app = express();
const port = 3000;
const uri = 'mongodb://localhost:27017';
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
app.use(express.json());
app.post('/register', async (req, res) => {
const { username, password } = req.body;
const db = client.db('blog');
const users = db.collection('users');
const result = await users.insertOne({ username, password });
res.json({ message: 'User registered', id: result.insertedId });
});
app.post('/login', async (req, res) => {
const { username, password } = req.body;
const db = client.db('blog');
const users = db.collection('users');
const user = await users.findOne({ username, password });
if (user) {
res.json({ message: 'Login successful' });
} else {
res.status(401).json({ message: 'Invalid credentials' });
}
});
app.post('/posts', async (req, res) => {
const { title, content } = req.body;
const db = client.db('blog');
const posts = db.collection('posts');
const result = await posts.insertOne({ title, content });
res.json({ message: 'Post created', id: result.insertedId });
});
app.get('/posts', async (req, res) => {
const db = client.db('blog');
const posts = db.collection('posts');
const allPosts = await posts.find().toArray();
res.json(allPosts);
});
app.listen(port, async () => {
await client.connect();
console.log(`Blog app listening at http://localhost:${port}`);
});
5. 总结
通过本教程,你已经学习了如何安装和配置 MongoDB,以及如何使用 MongoDB 的 Node.js 驱动进行基本的数据库操作。我们还通过一个简单的博客系统示例,展示了如何在实际项目中使用 MongoDB。希望你能继续深入学习 MongoDB 的高级功能,如索引、聚合、复制和分片等。