马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本文具体介绍了如何在Node.js应用程序中集成MongoDB数据库,并使用Mongoose库举行数据操纵。我们将涵盖MongoDB在Ubuntu 20系统中的安装、Bash下令的CRUD操纵、Mongoose数据建模(Schema/Model)、关联查询与聚合管道,以及实战案例——用户注册系统的开辟。通过本文,你将把握Node.js与MongoDB集成的完备流程。
1. MongoDB在Ubuntu 20系统中安装与Bash下令的CRUD操纵
1.1 MongoDB安装
在Ubuntu 20系统中安装MongoDB,你可以通过以下步调举行:
方法一:直接安装
导入公共GPG密钥
- wget -qO - https://www.mongodb.org/static/pgp/server-7.0.asc | sudo apt-key add -
复制代码 创建MongoDB源列表文件
- echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
复制代码 更新软件包列表并安装MongoDB
- sudo apt-get update
- sudo apt-get install -y mongodb-org
复制代码 启动MongoDB服务
- sudo systemctl start mongod
- sudo systemctl enable mongod
复制代码 方法二:使用Docker镜像
如果你更喜好使用Docker来管理MongoDB,可以使用以下下令:
- docker pull mongo
- docker run -itd --name mongo_latest -p 27017:27017 mongo
复制代码 然后,你可以通过docker exec -it mongo_latest mongosh进入MongoDB shell。
1.2 Bash下令的CRUD操纵
增操纵
- mongo
- use myDatabase
- db.users.insert({name: "deming_su", age: 22, email: "deming_su@163.com"})
复制代码 查操纵
更操纵
- db.users.updateOne({name: "deming_su"}, {$set: {age: 23}})
复制代码 删操纵
- db.users.deleteOne({name: "deming_su"})
复制代码 2. Mongoose数据建模(Schema/Model)
2.1 Mongoose安装
首先,确保你的Node.js环境已经安装完毕,然后通过npm安装Mongoose:
2.2 定义Schema
Schema是Mongoose中用于定义文档布局的蓝图。以下是一个简单的用户Schema示例:
- const mongoose = require('mongoose');
- const userSchema = new mongoose.Schema({
- id: String,
- name: String,
- age: Number,
- email: {
- type: String,
- unique: true
- }
- });
复制代码 2.3 创建Model
Model是Schema的编译版本,用于创建和操纵数据库中的文档。你可以使用mongoose.model方法创建Model:
- const User = mongoose.model('User', userSchema);
复制代码 2.4 CRUD操纵
使用Mongoose举行CRUD操纵非常简单。以下是一些示例:
增操纵
- const mongoose = require('mongoose');
- const User = require('./models/user');
- mongoose.connect('mongodb://localhost:27017/myDatabase', {
- useNewUrlParser: true,
- useUnifiedTopology: true
- });
- const newUser = new User({id: "deming_su", name: "deming_su", age: 28, email: "deming_su@163.com"});
- newUser.save();
复制代码 查操纵
- User.find({id: "deming_su"}, (err, users) => {
- if (err) {
- console.error(err);
- } else {
- console.log(users);
- }
- });
复制代码 更操纵
- User.findByIdAndUpdate('deming_su', {$set: {age: 29}}, (err, user) => {
- if (err) {
- console.error(err);
- } else {
- console.log(user);
- }
- });
复制代码 删操纵
- User.findByIdAndDelete('deming_su', (err, user) => {
- if (err) {
- console.error(err);
- } else {
- console.log(user);
- }
- });
复制代码 3. 关联查询与聚合管道
3.1 关联查询
在MongoDB中,关联查询通常通过$lookup操纵符在聚合管道中实现。假设我们有两个集合:users和orders,每个订单都属于一个用户,我们可以通过user_id字段举行关联查询。
- User.aggregate([
- {
- $lookup: {
- from: 'orders',
- localField: '_id',
- foreignField: 'user_id',
- as: 'orders'
- }
- }
- ]).exec((err, users) => {
- if (err) {
- console.error(err);
- } else {
- console.log(users);
- }
- });
复制代码 3.2 聚合管道
聚合管道允许你对集合中的文档举行一系列复杂的转换和聚合操纵。以下是一个简单的聚合管道示例,用于统计每个用户的订单总数:
- Order.aggregate([
- {
- $group: {
- _id: '$user_id',
- totalOrders: { $sum: 1 }
- }
- }
- ]).exec((err, results) => {
- if (err) {
- console.error(err);
- } else {
- console.log(results);
- }
- });
复制代码 4. 实战:用户注册系统开辟
4.1 系统计划
用户注册系统需要实现以下功能:
- 用户注册:网络用户信息(如用户名、密码、邮箱等)并保存到数据库。
- 用户登录:验证用户信息并登录系统。
- 用户注销:清除用户会话并注销系统。
4.2 数据建模
首先,我们需要定义用户数据模子。使用Mongoose,我们可以创建一个简单的用户Schema:
- const mongoose = require('mongoose');
-
- const userSchema = new mongoose.Schema({
- username: {
- type: String,
- required: true,
- unique: true
- },
- password: {
- type: String,
- required: true
- },
- email: {
- type: String,
- required: true,
- unique: true
- }
- });
复制代码 4.3 实现注册功能
前端(HTML + JavaScript)
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>User Registration</title>
- </head>
- <body>
- <form id="registerForm">
- <label for="username">Username:</label>
- <input type="text" id="username" name="username" required><br><br>
- <label for="password">Password:</label>
- <input type="password" id="password" name="password" required><br><br>
- <label for="email">Email:</label>
- <input type="email" id="email" name="email" required><br><br>
- <button type="submit">Register</button>
- </form>
-
- <script>
- document.getElementById('registerForm').addEventListener('submit', async function(event) {
- event.preventDefault();
- const username = document.getElementById('username').value;
- const password = document.getElementById('password').value;
- const email = document.getElementById('email').value;
-
- const response = await fetch('/register', {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json'
- },
- body: JSON.stringify({ username, password, email })
- });
-
- const result = await response.json();
- if (result.success) {
- alert('Registration successful!');
- } else {
- alert('Registration failed: ' + result.message);
- }
- });
- </script>
- </body>
- </html>
复制代码 后端(Node.js + Express + Mongoose)
- const express = require('express');
- const mongoose = require('mongoose');
- const bodyParser = require('body-parser');
-
- const app = express();
- const port = 3000;
-
- mongoose.connect('mongodb://localhost:27017/userRegistration', {
- useNewUrlParser: true,
- useUnifiedTopology: true
- });
-
- app.use(bodyParser.json());
-
- const User = require('./models/user');
-
- app.post('/register', async (req, res) => {
- const { username, password, email } = req.body;
-
- try {
- const user = new User({ username, password, email });
- await user.save();
- res.json({ success: true });
- } catch (err) {
- res.json({ success: false, message: err.message });
- }
- });
-
- app.listen(port, () => {
- console.log(`Server is running on http://localhost:${port}`);
- });
复制代码 4.4 实现登录和注销功能
登录和注销功能的实现与注册类似,这里不再赘述。你可以参考上述代码,通过发送POST请求到/login和/logout端点来实现用户登录和注销功能。
结语
通过本文,你了解了如何在Node.js应用程序中集成MongoDB数据库,并使用Mongoose库举行数据操纵。我们涵盖了MongoDB的安装、Bash下令的CRUD操纵、Mongoose数据建模、关联查询与聚合管道,以及实战案例——用户注册系统的开辟。盼望这些内容对你有所帮助,让你可以或许更好地把握Node.js与MongoDB的集成技能。
关注我!! |