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 后端开发 , 更多特性建议阅读官方文档,并实践不同的操作和配置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/939934.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【2024/12最新】CF罗技鼠标宏分享教程与源码

使用效果&#xff1a; 支持的功能 M4 7发一个点HK417 连点瞬狙炼狱加特林一个圈 下载链接 点击下载

vue2组件

文章目录 组件注册全局注册局部注册 组件中的props格式单向数据校验 组件中的事件使用传参声明事件校验 组件上的v-model使用携带参数多个v-model处理修饰符 透传 Attributes简单使用禁用透传多个继承 动态组件介绍使用KeepAlive包含缓存生命周期 插槽使用默认内容具名插槽条件…

【C++】用哈希表封装myunordered_map和myunordered_set

前言 本篇博客我们来用哈希表模拟实现一下STL库里的unordered_map与unordered_set &#x1f493; 个人主页&#xff1a;小张同学zkf ⏩ 文章专栏&#xff1a;C 若有问题 评论区见&#x1f4dd; &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐文章 目录 1.源码及框架分析 2.模…

在linux系统的docker中安装GitLab

一、安装GitLab&#xff1a; 在安装了docker之后就是下载安装GitLab了&#xff0c;在linux系统中输入命令&#xff1a;docker search gitlab就可以看到很多项目&#xff0c;一般安装第一个&#xff0c;它是英文版的&#xff0c;如果英文不好可以安装twang2218/gitlab-ce-zh。 …

Restaurants WebAPI(一)—— clean architecture

文章目录 项目地址一、Restaurants.Domain 核心业务层1.1 Entities实体层1.2 Repositories 数据操作EF的接口二、Restaurants.Infrastructure 基础设施层2.1 Persistence 数据EF CORE配置2.2 Repositories 数据查询实现2.3 Extensions 服务注册三、Restaurants.Application用例…

全栈开发----Mysql基本配置与使用

本篇是在已下载Mysql的情况下进行的&#xff0c;若还未下载或未创建Mysql服务&#xff0c;请转到这篇: 2024 年 MySQL 8.0.40 安装配置、Workbench汉化教程最简易&#xff08;保姆级&#xff09;_mysql8.0.40下载安装教程-CSDN博客 本文对于mysql的操作均使用控制台sql原生代码…

AI可信论坛亮点:合合信息分享视觉内容安全技术前沿

前言 在当今科技迅猛发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;技术正以前所未有的速度改变着我们的生活与工作方式。作为AI领域的重要盛会&#xff0c;CSIG青年科学家会议AI可信论坛汇聚了众多青年科学家与业界精英&#xff0c;共同探讨AI技术的最新进展、挑…

逆变器中自举电路设计要点及其取值分析

自举电源具有电路简单&#xff0c;成本低等优点。可以减小变压器尺寸&#xff0c;可以使用较小的磁芯骨架即可满足整机对电源的需求。不过其也有不足之处&#xff0c;比如只能用于小功率设计&#xff08;驱动器已验证到11KW50A模块的驱动设计&#xff09;&#xff0c;对输出响应…

如何测量分辨率

一、什么是分辨率&#xff1f; 分辨率指的是分清物体细节的能力。分辨率是一个成像系统还原空间频率的能力。一些人只是简单的用分辨率去描述极限分辨率&#xff0c;但是相机在在不同的对比度的情况下还原低&#xff0c;中和高频率的能力&#xff0c;也可以显示全面综合的信息。…

springboot中——Logback介绍

程序中的日志&#xff0c;是用来记录应用程序的运行信息、状态信息、错误信息等。 Logback基本使用 springboot的依赖自动传递了logback的依赖&#xff0c;所以不用再引入依赖 之后在resources文件下创建logback.xml文件&#xff0c;写入 <?xml version"1.0" …

git 删除鉴权缓存及账号信息

在Windows系统下 清除凭证管理器中的Git凭据 按下Win R键&#xff0c;打开“运行”对话框&#xff0c;输入control&#xff0c;然后回车&#xff0c;打开控制面板。在控制面板中找到“用户账户”&#xff0c;然后点击“凭据管理器”。在凭据管理器中&#xff0c;找到“Windows…

Apache Solr RCE(CVE-2017-12629)--vulhub

Apache Solr 远程命令执行漏洞&#xff08;CVE-2017-12629&#xff09; Apache Solr 是一个开源的搜索服务器。Solr 使用 Java 语言开发&#xff0c;主要基于 HTTP 和 Apache Lucene 实现。原理大致是文档通过Http利用XML加到一个搜索集合中。查询该集合也是通过 http收到一个…

vue预览和下载 pdf、ppt、word、excel文档,文件类型为链接或者base64格式或者文件流,

** 方法1&#xff1a;word、xls、ppt、pdf 这些文件&#xff0c; 如果预览的文件是链接可以直接打开&#xff0c;可用微软官方的预览地址 ** <iframe width"100%" :src"textVisibleURl " id"myFramePPT" style"border: none;backgroun…

Postbot使用教程

1.什么是Postbot&#xff1f; Postbot 是 Postman 中 API 工作流的 AI 助手。您可以让 Postbot 帮助您排查 API 请求问题、编写测试脚本和文档以及理解大型数据集。如果您需要有关使用 Postman 的帮助或不确定下一步该怎么做&#xff0c;也可以向 Postbot 询问。 2.开始使用 …

考试报名管理系统

集中实践报告 ---《项目综合实习1(数据结构)》 题目:考试报名管理系统 系统设计与开发 摘 要 随着教育信息化的不断推进,考试报名管理系统在各类教育机构中的重要性日益凸显。本文旨在设计与实现一个高效、稳定且功能完备的考试报名管理系统,以满足现代教育考试的…

冬日养仓鼠小指南:温暖与陪伴同行

随着冬日的脚步悄然来临&#xff0c;家中可爱的小仓鼠也需要我们给予更多的关怀与呵护。仓鼠虽小&#xff0c;但它们的冬日养护却大有学问&#xff0c;关乎着这些小生命能否健康快乐地度过寒冷季节。 保暖是冬季养仓鼠的首要任务。我们可以为仓鼠的小窝增添一些保暖材料&#…

用C#(.NET8)开发一个NTP(SNTP)服务

完整源码&#xff0c;附工程下载&#xff0c;工程其实也就下面两个代码。 想在不能上网的服务器局域网中部署一个时间服务NTP&#xff0c;当然系统自带该服务&#xff0c;可以开启&#xff0c;本文只是分享一下该协议报文和能跑的源码。网上作为服务的源码不太常见&#xff0c;…

[机器学习]XGBoost(3)——确定树的结构

XGBoost的目标函数详见[机器学习]XGBoost&#xff08;2&#xff09;——目标函数&#xff08;公式详解&#xff09; 确定树的结构 之前在关于目标函数的计算中&#xff0c;均假设树的结构是确定的&#xff0c;但实际上&#xff0c;当划分条件不同时&#xff0c;叶子节点包含的…

51c视觉~合集33

我自己的原文哦~ https://blog.51cto.com/whaosoft/12163849 #Robin3D 3D场景的大语言模型&#xff1a;在鲁棒数据训练下的3DLLM新SOTA! 论文地址&#xff1a;https://arxiv.org/abs/2410.00255代码将开源&#xff1a;https://github.com/WeitaiKang/Robin3D 介绍 多模态…

【游戏中orika完成一个Entity的复制及其Entity异步落地的实现】 1.ctrl+shift+a是飞书下的截图 2.落地实现

一、orika工具使用 1)工具类 package com.xinyue.game.utils;import ma.glasnost.orika.MapperFactory; import ma.glasnost.orika.impl.DefaultMapperFactory;/*** author 王广帅* since 2022/2/8 22:37*/ public class XyBeanCopyUtil {private static MapperFactory mappe…