Node18.x进阶使用总结之MongoDB7.x(三)

news2024/12/25 0:32:15

Node18.x进阶使用总结之MongoDB7.x

  • 1、MongoDB7.x的安装
    • 1.1、下载安装与启动
    • 1.2、MongoDB目录
    • 1.3、安装MongoDB Shell
    • 1.4、设置环境变量
    • 1.5、使用MongoDB
  • 2、命令行交互
    • 2.1、数据库命令
    • 2.2、集合命令
    • 2.3、文档命令
  • 3、Mongoose
    • 3.1、连接数据库
    • 3.2、创建新文档
    • 3.3、字段类型
    • 3.4、字段值验证
      • 3.4.1、必填项
      • 3.4.2、默认值
      • 3.4.3、枚举值
      • 3.4.4、唯一值
    • 3.5、CRUD
      • 3.5.1、删除文档
      • 3.5.2、插入文档
      • 3.5.3、更新文档
      • 3.5.4、查询文档
    • 3.6、条件控制
      • 3.6.1、运算符
      • 3.6.2、逻辑运算
      • 3.6.3、正则匹配
      • 3.6.4、个性化读取

配套视频: 尚硅谷2023版Node.js零基础视频教程,nodejs新手到高手
配套代码: https://gitee.com/Augenstern-creator/kuang-study-nodejs
在这里插入图片描述

1、MongoDB7.x的安装

MongoDB 是一个基于分布式文件存储的数据库,官方地址 https://www.mongodb.com/

Mongodb 中有三个重要概念需要掌握:

  • 数据库(database) 数据库是一个数据仓库,数据库服务下可以创建很多数据库,数据库中可以存放很多集合
  • 集合(collection) 集合类似于 JS 中的数组,在集合中可以存放很多文档
  • 文档(document) 文档是数据库中的最小单位,类似于 JS 中的对象

在这里插入图片描述

1.1、下载安装与启动

本文主要介绍 MongoDB 最新版本 7.x 在Windows 的安装方式,和过去的 4.X、5.X 不同。

  • 下载地址:Download MongoDB Community Server | MongoDB,进入官网下载 Mongodb 安装包,网站会自动检测当前操作系统提供最新的版本,和适合此平台的安装包

在这里插入图片描述

  • 下载好后如下所示

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

安装完成后进入任务管理器

在这里插入图片描述

1.2、MongoDB目录

来到 MongoDB 的安装目录,我的是D:\Develop\MongoDB 7.0.1

在这里插入图片描述

其中,bin 是 MongoDB 提供的可执行程序的目录,data 是数据存储的目录,log 是日志存储的目录。后两者在过去都需要开发者手动创建。现在安装程序会自动创建

在这里插入图片描述

看下 bin 目录下的可执行程序, mongod.exe 用来启动 MongoDB 服务,mongos.exe 用来管理分片集群。

在 MongDB 6 以前,这个目录下会有很多可执行程序,比如最常用的 mongo.exe,它用来连接到 MongoDB 服务,是一个 shell 环境的客户端工具。但是现在需要单独进行安装。

1.3、安装MongoDB Shell

  • 下载地址:MongoDB Shell Download | MongoDB

在这里插入图片描述

在这里插入图片描述

1.4、设置环境变量

在这里插入图片描述

D:\Develop\MongoDB 7.0.1\bin

D:\Develop\MongoDB 7.0.1\mongosh

之后就可以在任意路径下使用 mongoshmongod 等命令了

1.5、使用MongoDB

  1. 打开 cmd 命令行窗口,输入 mongosh.exe
    • 默认会连接 mongodb://localhost:27017 的 MongoDB 服务
mongosh.exe

这是一个 shell 环境,支持 JavaScript 语法,还有一些扩展的操作数据库语法,比如查看所有的数据库:

show dbs

在这里插入图片描述

参考文章:MongoDB 6.x 在 Windows 和 Linux 下的安装教程(详细) -阿里云开发者社区 (aliyun.com)

2、命令行交互

命令行交互一般是学习数据库的第一步,不过这些命令在后续用的比较少,所以大家了解即可。

2.1、数据库命令

  1. 显示所有的数据库
show dbs
  1. 切换到指定的数据库,如果数据库不存在会自动创建数据库
use 数据库名
  1. 显示当前所在的数据库
db
  1. 删除当前数据库
use 库名

db.dropDatabase()

2.2、集合命令

  1. 创建集合
db.createCollection('集合名称')
  1. 显示当前数据库中的所有集合
show collections
  1. 删除某个集合
db.集合名.drop()
  1. 重命名集合
db.集合名.renameCollection('newName')

2.3、文档命令

  1. 插入文档
db.集合名.insert(文档对象);
  1. 查询文档
db.集合名.find(查询条件)

_id 是 mongodb 自动生成的唯一编号,用来唯一标识文档

  1. 更新文档
db.集合名.update(查询条件,新的文档)

db.集合名.update({name:'张三'},{$set:{age:19}})
  1. 删除文档
db.集合名.remove(查询条件)

3、Mongoose

  • Mongoose 是一个对象文档模型库,官网 :Mongoose.js中文网 (mongoosejs.net)

  • 作用:方便使用代码操作 mongodb 数据库

3.1、连接数据库

  1. 在空目录下打开终端,执行
npm init -y
  1. 下载Mongoose
npm i mongoose
  1. 导入 mongoose
//1. 下载 mongoose
//2. 导入 mongoose
const mongoose = require('mongoose');

//3. 连接数据库,如果数据库不存在,则会自动创建 bilibili 这个数据库
mongoose.connect('mongodb://127.0.0.1:27017/bilibili');

//4.设置回调
//连接成功的回调
mongoose.connection.once('open',() => {
  console.log('连接成功');
});


// 连接错误的回调
mongoose.connection.on('error',() => {
  console.log('连接出错');
});

//连接关闭的回调
mongoose.connection.on('close',() => {
  console.log('连接关闭');
});                    

3.2、创建新文档

//连接成功的回调
mongoose.connection.once('open',() => {
  console.log('连接成功');
  //5.创建文档结构对象
  //设置集合中文档的属性以及属性值的类型
  let BookSchema = new mongoose.Schema({
    title: String,
    author: String,
    price: Number
  });
  //6.创建文档模型对象
  //第一个参数是集合名称,第二个参数是结构对象
  //mongoose会使用集合的复数来创建集合,也就是集合名称是books  
  let BookModel = mongoose.model('book',BookSchema);

  //7.插入文档
  BookModel.create({
    title: '西游记',
    author: '吴承恩',
    price: 19.9
  }).then((data) => {
    console.log(data);
  });
  
});

在这里插入图片描述

3.3、字段类型

文档结构可选的常用字段类型列表:

类型描述
String字符串
Number数字
Boolean布尔值
Array数组,也可以用[] 来标识
Date日期
BufferBuffer 对象
Mixed任意类型,需要使用 mongoose.Schema.Types.Mixed 指定
ObjectId对象 ID,需要使用 mongoose.Schema.Types.ObjectId 指定
Decimal128高精度数字,需要使用 mongoose.Schema.Types.Decimal128 指定
//连接成功的回调
mongoose.connection.once('open',() => {
  console.log('连接成功');
  //5.创建文档结构对象
  //设置集合中文档的属性以及属性值的类型
  let BookSchema = new mongoose.Schema({
    title: String,
    author: String,
    price: Number,
    is_hot: Boolean,
    tags: [],
    pub_time: Date,
    test: mongoose.Schema.Types.Mixed
  });
  //6.创建文档模型对象
  //第一个参数是集合名称,第二个参数是结构对象
  let BookModel = mongoose.model('books',BookSchema);

  //7.插入文档
  BookModel.create({
    title: '西游记',
    author: '吴承恩',
    price: 19.9,
    is_hot: true,
    tags: ['鬼怪','励志','生活'],
    pub_time: new Date(),
    test: 123 //任意类型
  }).then((data) => {
    console.log(data);
  });
});

3.4、字段值验证

Mongoose 有一些内建验证器,可以对字段值进行验证:如果检测字段值正确,则放到数据库,如果检测字段值不合法,则禁止放入数据库。

3.4.1、必填项

title: {
    type: String,
    required: true // 设置必填项
},

3.4.2、默认值

author: {
    type: String,
    default: '匿名' //默认值
},

3.4.3、枚举值

gender: {
    type: String,
    enum: ['男','女'] //设置的值必须是数组中的
},

3.4.4、唯一值

username: {
    type: String,
    unique: true
},
  • 唯一值指的是插入的 username 是独一无二的

3.5、CRUD

数据库的基本操作包括四个,增加(create),删除(delete),修改(update),查找(read)

3.5.1、删除文档

//连接成功的回调
mongoose.connection.once('open',() => {
  console.log('连接成功');
  //5.创建文档结构对象
  //设置集合中文档的属性以及属性值的类型
  let BookSchema = new mongoose.Schema({
    title: {
      type: String,
      required: true,
    },
    author: String,
    price: Number
  });
  //6.创建文档模型对象
  //第一个参数是集合名称,第二个参数是结构对象
  let BookModel = mongoose.model('books',BookSchema);


  //7.删除一条
  //参数是条件
  BookModel.deleteOne({_id: '651b900b04fde8c2fd4a7f55'}).then(data => {
    console.log(data);
  }).catch(err => {
    console.log('删除失败');
    console.log(err);
  })
});

批量删除

//批量删除
BookModel.deleteMany({author:'Jay'}).then(data => {
    console.log(data);
}).catch(err => {
    console.log('删除失败');
    console.log(err);
})

3.5.2、插入文档

// 插入一条
BookModel.create({
    title: '西游记',
    author: '吴承恩',
    price: 19.9
}).then((data) => {
    console.log(data);
});

批量插入

//批量插入
BookModel.insertMany([{
    title: '西游记',
    author: '吴承恩',
    price: 19.9
},{
    title: '红楼梦',
    author: '曹雪芹',
    price: 19.9
}]).then(data => {
    console.log(data);
}).catch(err => {
    console.log(err);
})

3.5.3、更新文档

BookModel.updateOne({author: '吴承恩'}).then((data) => {
    console.log(data);
});

批量更新

BookModel.update({author: '吴承恩'}).then((data) => {
    console.log(data);
});

3.5.4、查询文档

BookModel.findeOne({author: '吴承恩'}).then((data) => {
    console.log(data);
});

// 根据id查询数据
BookModel.findeOne({_id: '651b900b04fde8c2fd4a7f55'}).then((data) => {
    console.log(data);
});

批量查询数据

//批量查询
BookModel.finde({author: '吴承恩'}).then((data) => {
    console.log(data);
});

3.6、条件控制

3.6.1、运算符

在 mongodb 不能 > < >= <= !== 等运算符,需要使用替代符号

  • > 使用 $gt

  • < 使用 $lt

  • >= 使用 $gte

  • <= 使用 $lte

  • !== 使用 $ne

db.students.find({id:{$gt:3}}); # id号比3大的所有的记录

3.6.2、逻辑运算

  • $or 逻辑或的情况
  • $and 逻辑与的情况
# 查找年龄为18或24 
db.students.find({$or:[{age:18},{age:24}]});
# 查找年龄大于15小于20
db.students.find({$and: [{age: {$lt:20}}, {age: {$gt: 15}}]});

3.6.3、正则匹配

条件中可以直接使用 JS 的正则语法,通过正则可以进行模糊查询

db.students.find({name:/imissyou/});

3.6.4、个性化读取

  1. 字段筛选

    只读取文档的某些属性,其他的属性不要

// 只查找 title
BookModel.find().select({
    _id: 0,
    title: 1
}).then(data => {
    console.log(data);
})
  1. 数据排序
// 根据价格进行排序
// 1升序、2降序
BookModel.find().sort({
   	price: 1
}).then(data => {
    console.log(data);
})
  1. 数据截取
//skip 跳过 limit 限定
//跳过第一个,限制2条数据
BookModel.find().skip(1).limit(2).then((data) => {
    console.log(data);
});

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue 百度地图/天地图设置铺满屏幕100%,解决空隙问题

设置100%无效&#xff0c;刷新依然右侧有空隙&#xff0c;解决&#xff1a;min-width: 100vw; <div class"aui-flex-col" style"width: 100%; height:100%"><div id"mapAllCon" style"width: 100%; min-width: 100vw; height: 10…

从0开始python学习-31.selenium 文本输入框、下拉选择框、文件上传、时间插件选择元素定位

目录 1. 纯文本输入框 2. 存在默认值的文本输入 3. 下拉选择框 4. 输入后下拉选择框 5. 文件上传 6. 时间插件 1. 纯文本输入框 driver.find_element(By.XPATH,/html/body/div[2]/td[2]/input).send_keys(测试名称) 2. 存在默认值的文本输入 注意&#xff1a; 1. 这种存…

mkv怎么转换为mp4?

mkv怎么转换为mp4&#xff1f;你是否有过这样的情况&#xff0c;电脑上播放MKV格式的视频文件很流畅&#xff0c;但却无法在手机端或者一些剪辑软件中正常播放以及识别&#xff0c;导致工作效率的降低&#xff1f;这个问题的根本原因在于电脑上的播放器可以兼容MKV格式&#xf…

Java中双冒号“::”到底什么意思

今天给大家分享一个JDK8中的新特性双冒号&#xff1a;”::“&#xff0c;双冒号“::”就是 Java 中的方法引用&#xff0c;是Java 8中的Lambda表达式写法之一&#xff0c;一种执行方法的方法。 在一定程度上简化了我们Java开发的冗余代码。 双冒号(::)使用场景一般有如下6种&a…

物流仓储RFID系统设计案例分享

一、项目背景 为了实现仓储货物管理数字化转型的目标&#xff0c;提升仓储业务自动化和数字化水平&#xff0c;在满足仓储日常需求的基础上&#xff0c;验证物联网和人工智能相关技术能力&#xff0c;为仓储业务的柔性自动化、快速部署和复制提供储备能力。 项目设计目标包括…

c++视觉ROI 区域和ROI 区域图像叠加

ROI 区域提取和ROI 区域图像叠加 ROI 区域提取 #include <opencv2/opencv.hpp>int main() {// 读取图像cv::Mat image cv::imread("1.jpg");// 检查图像是否成功加载if (image.empty()) {std::cerr << "Error: Could not read the image." …

hadoop集群安装并配置

文章目录 1.安装JDK 环境2.系统配置2.1修改本地hosts文件2.2创建hadoop 用户2.2 设置ssh免密&#xff08;使用hadoop 用户生成&#xff09; 3.安装 hadoop 3.2.43.1 安装hadoop3.1.1 配置Hadoop 环境变量 3.2配置 HDFS3.2.1 配置 workers 文件3.2.2 配置hadoop-env.sh3.2.3 配置…

【数字化转型】10大数字化转型能力成熟度模型01(IOMM)

一、前言 数字化转型是数据化能力建设的目标和价值&#xff0c;作为一个新兴的课题&#xff0c;目前为止并未出现一个统一的数字化转型成熟度模型。不同的企业和机构&#xff0c;根据自身的发展和认知&#xff0c;推出了自己的企业级或者准行业级标准。这些标准具有很强的参考意…

一本没有任何数学公式的自然语言处理入门书

ChatGPT 时代来了&#xff0c;AI 从旧时王谢堂前燕&#xff0c;飞入寻常百姓家。越来越多非 AI 领域 的软件开发者涌进 NLP(自然语言处理)领域。在这个快速发展的时代&#xff0c;如果这些软件开发 者要像读书那样先读 4 年本科、2 年硕士、3 年博士才能搞 AI&#xff0c;风口早…

Python:温度转换(摄氏度与华氏度)

Python:温度转换&#xff08;摄氏度与华氏度&#xff09; TempStrinput("请输入带有符号的温度值&#xff1a;") if TempStr[-1] in [F,f]:C(eval(TempStr[0:-1])-32)/1.8print("转换后的温度是{:.2f}C".format(C)) elif TempStr[-1] in[C,c]:F1.8*eval(T…

在Android中实现动态应用图标

在Android中实现动态应用图标 你可能已经遇到过那些能够完成一个神奇的技巧的应用程序——在你的生日时改变他们的应用图标&#xff0c;然后无缝切换回常规图标。这是一种引发你好奇心的功能&#xff0c;让你想知道&#xff0c;“他们到底是如何做到的&#xff1f;”。嗯&…

【EI会议征稿】第三届智慧交通、能源与动力国际学术会议(STEP 2023)

第三届智慧交通、能源与动力国际学术会议&#xff08;STEP 2023&#xff09; 2023 3rd International Conference on Smart Transportation, Energy and Power 第三届智慧交通、能源与动力国际学术会议 (STEP 2023) 将于2023年12月15-17日在中国三亚市隆重举行&#xff0c;会议…

使用vite+npm封装组件库并发布到npm仓库

组件库背景&#xff1a;使用elementplusvue封装了一个通过表单组件。通过JSX对el-form下的el-input和el-button等表单进行统一封装&#xff0c;最后达到&#xff0c;通过数据即可一键生成页面表单的功能。 1.使用vite创建vue项目 npm create vitelatest elementplus-auto-form…

Linux基础工具

&#x1f493;博主个人主页:不是笨小孩&#x1f440; ⏩专栏分类:数据结构与算法&#x1f440; C&#x1f440; 刷题专栏&#x1f440; C语言&#x1f440; &#x1f69a;代码仓库:笨小孩的代码库&#x1f440; ⏩社区&#xff1a;不是笨小孩&#x1f440; &#x1f339;欢迎大…

【轻松玩转MacOS】基本操作篇

引言 本文是系列的开篇&#xff0c;我将为大家介绍MacOS的基本操作。对于初次接触MacOS的用户来说&#xff0c;掌握这些基本操作是必不可少的。无论是启动和关机&#xff0c;还是使用键盘和鼠标&#xff0c;或者是快捷键的使用&#xff0c;这些基本操作都是你开始使用MacOS的第…

三星发布 Galaxy SmartTag 2

三星近日发布了一款新品 —— Galaxy SmartTag 2 追踪器&#xff0c;该款产品采用了全新的椭圆设计以取代上代 SmartTag 的菱形设计&#xff0c;这款的钥匙孔也比上代更大&#xff0c;并采用了金属圆环以防止磨损。 这款产品有黑、白2种颜色可供选择&#xff0c;支持 IP67 级防…

网络原理 - 详解

一&#xff0c;网络通信基础 1.1 IP地址 描述一个设备在网络上的地址&#xff0c;一般使用4个0~255之间的数字&#xff0c;并且使用三给 . 进行分割&#xff0c;如&#xff1a;127.0.0.0 1.2 端口号 端口号是一个2个字节的整数&#xff0c;用来区分一个主机上的不同应用程序…

全面解析HTTP协议

当谈到网络通信和Web开发时&#xff0c;HTTP&#xff08;Hypertext Transfer Protocol&#xff09;是一个非常重要的协议&#xff0c;它是用于在Web浏览器和服务器之间传输数据的基础协议。 什么是HTTP协议&#xff1f; HTTP是一种应用层协议&#xff0c;用于在客户端和服务器…

吸烟检测Y8N,支持C++,PYTHON,ANDROID

吸烟检测Y8N&#xff0c;支持C,PYTHON,ANDROID 现在&#xff0c;深度学习已经非常流行&#xff0c;最新出来的YOLOV8&#xff0c;更是将精度和速度达到极限。训练一个目标很简单&#xff0c;首先&#xff0c;标记图片&#xff1b;然后训练得到PT模型&#xff1b;最后转换成ONNX…

烟花爆竹厂如何做到0风险0爆炸事故?AI+视频监控平台给出答案

由于烟花爆竹具有易燃易爆风险&#xff0c;稍有不慎就会发生严重事故&#xff0c;而烟花爆竹厂区作为大量烟花爆竹存放地点&#xff0c;厂区面积大、工作人员杂乱&#xff0c;甚至有很多厂区原料存放不当&#xff0c;给日常的安全管理带来极大的压力&#xff0c;利用信息化手段…