MongoDB、Mongoose使用教程

文章目录

    • [一:MongoDB 简介](#一:MongoDB 简介)
      • [1.1 什么是 MongoDB](#1.1 什么是 MongoDB)
      • [1.2 特点](#1.2 特点)
      • [1.3 与关系数据库的区别:](#1.3 与关系数据库的区别:)
      • [1.4 资源链接:](#1.4 资源链接:)
    • [二:安装 MongoDB](#二:安装 MongoDB)
      • [2.1 安装前的准备](#2.1 安装前的准备)
      • [2.2 安装、启动 MongoDB](#2.2 安装、启动 MongoDB)
      • [2.3 创建用户 MongoDB](#2.3 创建用户 MongoDB)
    • 三、连接
    • [四:MongoDB 基础操作](#四:MongoDB 基础操作)
    • [五:Mongoose 使用](#五:Mongoose 使用)
      • [5.1 Mongoose 介绍](#5.1 Mongoose 介绍)
      • [5.2 安装](#5.2 安装)
      • [5.3 引入](#5.3 引入)
      • [5.4 建立链接](#5.4 建立链接)
      • [5.5 创建模式](#5.5 创建模式)
      • [5.6 创建模型](#5.6 创建模型)
      • [5.7 查询数据库, 查看已什么开头的名字](#5.7 查询数据库, 查看已什么开头的名字)
      • [5.8 增删查改](#5.8 增删查改)
    • [六:备份 、恢复数据](#六:备份 、恢复数据)
    • 七:结语

一:MongoDB 简介

1.1 什么是 MongoDB

MongoDB 是一个开源基于文档的 NoSQL 数据库 ,使用文档导向的数据模型是一个,它以其高性能、高可用性和易扩展性而闻名,非常适合处理大量的分布式数据。它以 BSON(二进制 JSON)格式存储数据,这使得它在存储复杂数据结构时非常灵活。

1.2 特点

  • 高性能:MongoDB 提供高性能的数据持久化。
  • 高可用性:通过副本集(Replica Sets)实现数据的自动故障转移。
  • 易扩展性:通过分片(Sharding)支持水平扩展。

1.3 与关系数据库的区别:

  • MongoDB 中存储的文档必须有一个_id键。这个键的值可以是任何类型的,默认是个 ObjectId 对象。
  • MongoDB 本身不支持传统关系型数据库中的 JOIN 操作,但支持引用,
SQL 术语/概念 MongoDB 术语/概念 解释/说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins 子文档、嵌套 表连接,MongoDB 不支持
primary key primary key 主键,MongoDB 自动将_id 字段设置为主键

1.4 资源链接:

二:安装 MongoDB

2.1 安装前的准备

这里我使用 docker ,这样方便点,如果没有安装 docker,需要先进行 docker 安装

2.2 安装、启动 MongoDB

bash 复制代码
# 拉取
docker pull mongo:latest

# 运行 , mongodb默认的端口时 27017
docker run -d --name mongo -p 8017:27017 mongo

2.3 创建用户 MongoDB

bash 复制代码
# 进入容器

docker exec -it mongo mongo admin

#  创建用户
db.createUser({ user:'root',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},'readWriteAnyDatabase']});

# 验证
db.auth("root", "123456")

三、连接

使用 Navicat 进行连接测试 , 使用上面设置的用户名、密码 root , 123456

MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。

四:MongoDB 基础操作

4.1 库操作:

MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。

js 复制代码
// 显示所有数据库
show dbs

// 切换数据库

use demo
db
// 输出 : demo

// 新增 , 插入一条数据,会自动创建这个数据库 和 集合,并插入该条数据
db.demo.insertOne({"name":"demo name"})

// 删除库
db.dropDatabase()

4.2 集合操作

js 复制代码
db.createCollection("demo");
// 新增 , 插入一条数据,会自动创建这个数据库 和 集合,并插入该条数据
db.demo.insertOne({ name: "demo name" });

// 更新集合
db.adminCommand({
  renameCollection: "test.demo",
  to: "test.demos",
});
// 删除集合
db.demo.drop();

4.3 文档操作

常用的插入文档方法包括:

  • db.collection.insertOne():插入单个文档
  • db.collection.insertMany():插入多个文档
  • db.collection.save():类似于 insertOne()。如果文档存在,则该文档会被更新;如果文档不存在,则会插入一个新文档
查询

MongoDB 查询文档使用 find()findOne() 方法。

js 复制代码
// 查全部
db.myCollection.find({});
// 条件查询
db.myCollection.find({ age: { $gt: 25 } });
编辑

常用的方法包括 updateOne()updateMany()replaceOne()findOneAndUpdate()

js 复制代码
// 单条
db.myCollection.updateOne(
  { name: "jty" }, // 过滤条件
  { $set: { age: 26 } } // 更新操作
);
// 多条

db.myCollection.updateMany(
  { age: { $lt: 30 } }, // 过滤条件
  { $set: { status: "active" } } // 更新操作
);

// 替换

db.myCollection.replaceOne(
  { name: "jty" }, // 过滤条件
  { name: "jty", age: 31 } // 新文档
);
删除

常用的删除文档方法包括 deleteOne()deleteMany() 以及 findOneAndDelete()

js 复制代码
db.demo.deleteOne({ name: "jty" });
db.demo.deleteMany({ status: "1" });
db.demo.findOneAndDelete({ name: "Charlie" });
排序

指定要排序的字段及排序顺序。

  • 1 表示升序
  • -1 表示降序。
js 复制代码
// 按 age 字段升序排序
db.myCollection.find().sort({ age: 1 });
文档关联

文档间可以通过嵌入和引用来建立联系。

MongoDB 中的关系可以是:

  • 1:1 (1 对 1)
  • 1: N (1 对多)
  • N: 1 (多对 1)
  • N: N (多对多)
引用:
js 复制代码
// 假设我们有两个集合:users 和 posts
db.users.insertOne({ _id: 1, name: "jty" });
db.posts.insertOne({ _id: 101, authorId: 1, content: "Hello, MongoDB!" });

// 查询用户及其发布的帖子
const user = db.users.findOne({ _id: 1 });
const posts = db.posts.find({ authorId: 1 });

// 在应用层合并结果
console.log(
  user.name,
  posts.map((post) => post.content)
);

五:Mongoose 使用

先介绍下 mongoose 的一些概念、然后以常见功能开发,来举例实现一些 api 介绍,如子文档嵌套、关联查询、查询密码隐藏、默认值设置、MD5 加密、文档数组更新

5.1 Mongoose 介绍

Mongoose 中的一切都始于结构(Schema),没有模型有一个默认 Id _id, 他是 ObjectId() 类型的
模型(Model) 是从 Schema 定义编译而来的奇特构造函数, 模型的一个实例称为 document。模型负责从底层 MongoDB 数据库创建和读取文档。

5.2 安装

js 复制代码
npm install mongoose --save

5.3 引入

js 复制代码
const mongoose = require("mongoose");

5.4 建立链接

js 复制代码
await mongoose.connect("mongodb://127.0.0.1:27017/test");
// 添加用户认证
await mongoose.connect(
      "mongodb://root:123456@localhost:8017/test?authSource=admin"
   );

5.5 创建模式

js 复制代码
const UserSchema = new mongoose.Schema({
  name: String,
});

5.6 创建模型

js 复制代码
const User = mongoose.model("User", UserSchema);

5.7 查询数据库, 查看已什么开头的名字

js 复制代码
await User.find();
await User.find({ name: /^fluff/ });

5.8 增删查改

通过对模型的操作,可以完成增删查改

js 复制代码
// <!-- 构建文档 -->

const user = new User({ name: "jty" });
console.log(user.name); // ''
// <!-- 保存进数据库 -->
await user.save();

// 或者下面的方式
await User.create({ name: "jty" });
await User.insertMany([{ name: "jty" }]);

js 复制代码
await User.deleteOne({ name: "jtt" });

js 复制代码
await User.find({}); // 查询全部
await User.find({ name: /^jty/ }); // 正则查询
await User.findOne({ name: "jty", age: { $gte: 18 } }).exec(); // 条件查询

js 复制代码
await Tank.updateOne({ name: "jty" }, { name: "jtt" });
await Tank.updateMany({ name: "jty" }, { name: "jtt" });

六:备份 、恢复数据

  • 使用 mongodump 工具备份 MongoDB 数据库。
  • 使用 mongorestore 工具恢复备份的数据。

七:结语

MongoDB 是一个功能强大的 NoSQL 数据库,适用于各种规模的应用。本文提供了 MongoDB 的基础知识和一些高级特性,帮助你快速上手 MongoDB 和 使用 mongoose 进行 Node 后端开发 , 更多特性建议阅读官方文档,并实践不同的操作和配置。

相关推荐
大得3693 分钟前
vue2使用render,js中写html
前端·javascript·vue.js
wangy5668 分钟前
uboot 打开log 的 方法
java·前端·javascript
前端Hardy9 分钟前
HTML&CSS:这个动态删除按钮打几分?
前端·javascript·css·html
前端与小赵22 分钟前
什么是混合应用,有哪些特点
前端
保定公民22 分钟前
问题小记-达梦数据库报错“字符串转换出错”处理
数据库·sql·达梦数据库·问题处理·dm
乐容27 分钟前
electron窗口锁定、解锁、解决阴影问题
前端·javascript·electron
SHANGHAILINGEN34 分钟前
双剑合璧:转录组+宏基因组揭示微生物与宿主互作机制
数据库·测序·组学
Cachel wood43 分钟前
Vue.js前端框架教程11:Vue监听器watch和watchEffect
前端·javascript·vue.js·git·ui·前端框架·ecmascript
蜗牛前端1 小时前
🎉🎉🎉2024年末重磅推出更懂你的uni-app框架!!!
前端·前端框架·uni-app
Cachel wood1 小时前
Vue.js前端框架教程14:Vue组件el-popover
前端·javascript·vue.js·python·elementui·django·前端框架