欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > MongoDB、Mongoose使用教程

MongoDB、Mongoose使用教程

2025/5/7 12:52:05 来源:https://blog.csdn.net/cdns_1/article/details/144512547  浏览:    关键词:MongoDB、Mongoose使用教程

文章目录

    • 一:MongoDB 简介
      • 1.1 什么是 MongoDB
      • 1.2 特点
      • 1.3 与关系数据库的区别:
      • 1.4 资源链接:
    • 二:安装 MongoDB
      • 2.1 安装前的准备
      • 2.2 安装、启动 MongoDB
      • 2.3 创建用户 MongoDB
    • 三、连接
    • 四:MongoDB 基础操作
      • 4.1 库操作:
      • 4.2 集合操作
      • 4.3 文档操作
        • 查询
        • 编辑
        • 删除
        • 排序
        • 文档关联
        • 引用:
    • 五:Mongoose 使用
      • 5.1 Mongoose 介绍
      • 5.2 安装
      • 5.3 引入
      • 5.4 建立链接
      • 5.5 创建模式
      • 5.6 创建模型
      • 5.7 查询数据库, 查看已什么开头的名字
      • 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 术语/概念解释/说明
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
table joins子文档、嵌套表连接,MongoDB 不支持
primary keyprimary key主键,MongoDB 自动将_id 字段设置为主键

1.4 资源链接:

  • mongoose
  • docker
  • mongo docker

二:安装 MongoDB

2.1 安装前的准备

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

2.2 安装、启动 MongoDB

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

2.3 创建用户 MongoDB

# 进入容器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 数据库中。

// 显示所有数据库
show dbs// 切换数据库use demo
db
// 输出 : demo// 新增 , 插入一条数据,会自动创建这个数据库 和 集合,并插入该条数据
db.demo.insertOne({"name":"demo name"})// 删除库
db.dropDatabase()

4.2 集合操作

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() 方法。

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

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

// 单条
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()

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

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

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

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

MongoDB 中的关系可以是:

  • 1:1 (1 对 1)
  • 1: N (1 对多)
  • N: 1 (多对 1)
  • N: N (多对多)
引用:
// 假设我们有两个集合: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 安装

npm install mongoose --save

5.3 引入

const mongoose = require("mongoose");

5.4 建立链接

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

5.5 创建模式

const UserSchema = new mongoose.Schema({name: String,
});

5.6 创建模型

const User = mongoose.model("User", UserSchema);

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

await User.find();
await User.find({ name: /^fluff/ });

5.8 增删查改

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

// <!-- 构建文档 -->const user = new User({ name: "jty" });
console.log(user.name); // ''
// <!-- 保存进数据库 -->
await user.save();// 或者下面的方式
await User.create({ name: "jty" });
await User.insertMany([{ name: "jty" }]);

await User.deleteOne({ name: "jtt" });

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

await Tank.updateOne({ name: "jty" }, { name: "jtt" });
await Tank.updateMany({ name: "jty" }, { name: "jtt" });

六:备份 、恢复数据

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

七:结语

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词