一、什么是MongoDB?
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
二、MongoDB的下载解压
官网下载地址:Download MongoDB Community Server | MongoDB
通过点击Select package选择包的版本。
Version 选择:稳定版4.4.28
Mongo的版本分为稳定版和开发版,其中,稳定版是经过充分测试的版本,具有稳定性和可靠性;而开发版是未得到充分测试的版本,不适合初学者。所以我选择的稳定版本4.4.28。稳定版与开发版区分在于版本号(类似于x.y.z),版本号中的第一位数字是主版本号;第二位数字是用于区分是稳定版还是开发版,偶数为稳定版,奇数为开发版;第三位数字为修订号。版本自行选择。
Package选择:ZIP
基于Windows平台的安装包打包方式有两种,分别是MSI和ZIP,MSI安装包需要进行安装,而ZIP安装包只需要解压就可以使用。
解压MongoDB安装包到自己创建的MongoDB文件夹中。通常建议将MongoDB的数据文件和日志文件与项目所在的磁盘分开,比如我自己创建的项目放在C盘,MongoDB文件夹就放在D盘。
因为将MongoDB文件夹与项目放在同一个磁盘可能会导致一些潜在的问题:
-
磁盘空间限制:当项目生成大量数据时,MongoDB的数据文件可能会占用较多的磁盘空间。如果MongoDB的数据文件和项目所在的磁盘共享相同的空间,可能会影响到项目的正常运行。
-
性能影响:MongoDB的读写操作可能会对磁盘进行频繁的访问。如果MongoDB的数据文件和项目文件共享相同的磁盘,可能会导致磁盘I/O竞争,从而影响系统的性能。
三、启动MongoDB服务
使用命令行参数的方式启动MongoDB服务
这里我们需要创建一个和bin目录同级的data文件夹。并在data文件夹下创建db和logs子文件夹,其中db文件夹用于储存数据库文件,logs文件夹用于储存日志文件(便于在日志文件中查看MongoDB相关使用信息,不然关闭命令行窗口后,将无法再次查看MongoDB的日志。注意这是Package选择ZIP必须要做的,选择MSI的话不用,人家自带)
在MongoDB的bin文件夹下打开命令行窗口。即进入bin文件夹,在路径栏中输入cmd提示符,再按Enter键,在当前路径下打开命令行窗口。
进入命令窗口栏后输入mongod --dbpath=..\data\db
启动之后可以看到MongoDB的默认端口是27017
在浏览器中输入: localhost:27017
得到如下图所示提示就能证明MongoDB启动成功
在命令行窗口按Ctrl+C结束以上命令
然后输入mongod --logpath=..\data\logs\mongodb.log
可以快捷创建mongodb.log日志文件,查看logs文件夹的子文件中出现mongodb.log文件即为创建成功
四、Node.js和Express搭建的后台服务器框架连接MongoDB数据库
在 Express.js 中连接 MongoDB 数据库并进行操作通常需要使用第三方库,其中最流行的是 mongoose。mongoose 是一个 MongoDB 对象模型工具,它提供了直观的、基于模式的操作,让开发者更容易与 MongoDB 数据库进行交互。以下是连接 MongoDB 数据库并在 Express.js 中使用 mongoose 的详细讲解:
1. 安装 mongoose:
首先,你需要通过 npm 安装 mongoose:
npm install mongoose
2. 连接 MongoDB 数据库:
在 Express.js 应用中,你可以使用 mongoose 来连接到 MongoDB 数据库。在你的 Express 应用中,你可以创建一个单独的模块来处理数据库连接。以下是一个例子:
// db.js
const mongoose = require('mongoose');
const connectDB = async () => {
try {
await mongoose.connect('mongodb://localhost:27017/your-database-name', {
useNewUrlParser: true,
useUnifiedTopology: true,
});
console.log('MongoDB Connected');
} catch (error) {
console.error('Error connecting to MongoDB:', error);
}
};
module.exports = connectDB;
然后在你的 Express 应用中引入并调用 connectDB 函数:
// app.js
const express = require('express');
const connectDB = require('./db');
const app = express();
const port = 3000;
// 连接到 MongoDB 数据库
connectDB();
app.get('/', (req, res) => {
res.send('Hello, Express with MongoDB!');
});
app.listen(port, () => {
console.log(`Server is running at http://localhost:${port}`);
});
3. 定义模型和创建文档:
mongoose 允许你定义模型来映射数据库中的集合。以下是一个例子,展示了如何在 Express.js 中定义模型、创建文档并保存到数据库:
// models/User.js
const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
name: String,
email: String,
});
const User = mongoose.model('User', userSchema);
module.exports = User;
在你的 Express 应用中引入这个模型并使用它:
// app.js
const express = require('express');
const connectDB = require('./db');
const User = require('./models/User');
const app = express();
const port = 3000;
// 连接到 MongoDB 数据库
connectDB();
app.get('/create-user', async (req, res) => {
// 创建一个用户文档
const newUser = new User({
name: 'John Doe',
email: 'john@example.com',
});
try {
// 保存到数据库
const savedUser = await newUser.save();
res.json(savedUser);
} catch (error) {
res.status(500).json({ error: 'Error creating user' });
}
});
app.listen(port, () => {
console.log(`Server is running at http://localhost:${port}`);
});
4. 查询数据:
可以使用 mongoose 提供的 API 来查询数据库中的数据。以下是一个例子,展示了如何在 Express.js 中查询用户数据:
// app.js
const express = require('express');
const connectDB = require('./db');
const User = require('./models/User');
const app = express();
const port = 3000;
// 连接到 MongoDB 数据库
connectDB();
app.get('/get-users', async (req, res) => {
try {
// 查询所有用户
const users = await User.find();
res.json(users);
} catch (error) {
res.status(500).json({ error: 'Error fetching users' });
}
});
app.listen(port, () => {
console.log(`Server is running at http://localhost:${port}`);
});
按顺序放下来大致就是如下图:
这只是 mongoose 的一些基础用法。还有更高级的操作,比如数据验证、中间件、聚合管道等。要玩花样还是得看Mongoose 官方文档。