当前位置: 首页 > news >正文

Node学习笔记之MongoDB

一、简介

1.1 Mongodb 是什么

MongoDB 是一个基于分布式文件存储的数据库,官方地址 MongoDB: The Developer Data Platform | MongoDB

1.2 为什么选择 Mongodb

操作语法与 JavaScript 类似,容易上手,学习成本低

二、核心概念

Mongodb 中有三个重要概念需要掌握
数据库(database) 数据库是一个数据仓库,数据库服务下可以创建很多数据库,数据库中可以存
放很多集合
集合(collection) 集合类似于 JS 中的数组,在集合中可以存放很多文档
文档(document) 文档是数据库中的最小单位,类似于 JS 中的对象


JSON 文件示例:

{"accounts": [{"id": "3-YLju5f3","title": "买电脑","time": "2023-02-08","type": "-1","account": "5500","remarks": "为了上网课"},{"id": "3-YLju5f4","title": "请女朋友吃饭","time": "2023-02-08","type": "-1","account": "214","remarks": "情人节聚餐"},{"id": "mRQiD4s3K","title": "发工资","time": "2023-02-19","type": "1","account": "4396","remarks": "终于发工资啦!~~"}],"users":[{"id": 1,"name": "zhangsan","age": 18},{"id": 2,"name": "lisi","age": 20},{"id": 3,"name": "wangwu","age": 22}]
}

大家可以通过 JSON 文件来理解 Mongodb 中的概念

  • 一个 JSON 文件 好比是一个 数据库 ,一个 Mongodb 服务下可以有 N 个数据库
  • JSON 文件中的 一级属性的数组值 好比是 集合
  • 数组中的对象好比是 文档
  • 对象中的属性有时也称之为 字段

一般情况下

一个项目使用一个数据库

一个集合会存储同一种类型的数据

三、下载安装与启动

下载地址: Download MongoDB Community Server | MongoDB

建议选择 zip 类型, 通用性更强

配置步骤如下:

往下滑

选择安装包(建议不要选择最新的)

MongoDB6没有mongon需要自己去下载

MongoDB5有mongon

选择平台和类型进行下载

1> 将压缩包移动到 C:\Program Files 下,然后解压

2> 创建 C:\data\db 目录,mongodb 会将数据默认保存在这个文件夹(数据放这里

3> 以 mongodb 中 bin 目录作为工作目录,启动命令行

4> 运行命令 mongod

看到最后的 waiting for connections 则表明服务 已经启动成功

然后可以使用mongosh命令连接本机的 mongodb 服务

MongoDB6后无 “mongo.exe”

MongDB6.0后已经不再默认为你安装shell工具
在MongoDB\bin\ 下没有mongo.exe

解决

注意:

为了方便后续方便使用 mongod 命令,可以将 bin 目录配置到环境变量 Path 中

千万不要选中服务端窗口的内容 ,选中会停止服务,可以 敲回车 取消选中

四、命令行交互

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

4.1 数据库命令

  1. 显示所有的数据库

show dbs

  1. 切换到指定的数据库,如果数据库不存在会自动创建数据库

use 数据库名

  1. 显示当前所在的数据库

db

  1. 删除当前数据库

use 库名

db.dropDatabase()

4.2 集合命令

  1. 创建集合

db.createCollection('集合名称')

  1. 显示当前数据库中的所有集合

show collections


3. 删除某个集合

db.集合名.drop()

  1. 重命名集合

db.集合名.renameCollection('newName')

4.3 文档命令

  1. 插入文档

db.集合名.insert(文档对象);

  1. 查询文档

db.集合名.find(查询条件)

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

  1. 更新文档

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

db.集合名.update({name:'张三'},{$set:{age:19}})

  1. 删除文档
    db.集合名.remove(查询条件)

五、Mongoose

5.1 介绍

Mongoose 是一个对象文档模型库,官网http://www.mongoosejs.net/

5.2 作用

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

5.3 使用流程

//1. 安装 mongoose
//2. 导入 mongooseconst mongoose = require('mongoose');//3. 连接数据库mongoose.connect('mongodb://127.0.0.1:27017/bilibili');//4. 设置连接回调//连接成功mongoose.connection.on('open', () => {console.log('连接成功');//5. 创建文档结构对象let BookSchema = new mongoose.Schema({title: String,author: String,price: Number});//6. 创建文档模型对象let BookModel = mongoose.model('book', BookSchema);//7. 插入文档BookModel.create({title: '西游记',author: '吴承恩',price: 19.9}, (err, data) => {if (err) throw err;//输出 data 对象console.log(data);//8. 断开连接mongoose.disconnect();});
});//连接出错mongoose.connection.on('error', () => {console.log('连接出错~~');
})//连接关闭mongoose.connection.on('close', () => {console.log('连接关闭');
})

5.4 字段类型

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

5.5 字段值验证

Mongoose 有一些内建验证器,可以对字段值进行验证

5.5.1 必填项

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

5.5.2 默认值

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

5.5.3 枚举值

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

5.5.4 唯一值

username: {type: String,unique: true},

unique 需要 重建集合 才能有效果 永远不要相信用户的输入

5.6 CURD

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

5.6.1 增加

插入一条

SongModel.create({title:'给我一首歌的时间',author: 'Jay'}, function(err, data){//错误console.log(err);//插入后的数据对象console.log(data);
});

批量插入

//1.引入mongooseconst mongoose = require('mongoose');//2.链接mongodb数据库 connect 连接mongoose.connect('mongodb://127.0.0.1:27017/project');//3.设置连接的回调mongoose.connection.on('open',()=>{//4.声明文档结构const PhoneSchema = new mongoose.Schema({brand:String,color:String,price:Number,tags:Array})//6.创建模型对象const PhoneModel = mongoose.model('phone',PhoneSchema);PhoneModel.insertMany([{brand:'华为',color:'灰色',price:2399,tags:['电量大','屏幕大','信号好']},{brand:'小米',color:'白色',price:2099,tags:['电量大','屏幕大','信号好']}],(err,data)=>{if(err) throw err;console.log('写入成功');mongoose.connection.close();})
})

5.6.2 删除

删除一条数据

SongModel.deleteOne({_id:'5dd65f32be6401035cb5b1ed'}, function(err){if(err) throw err;console.log('删除成功');mongoose.connection.close();
});

批量删除

SongModel.deleteMany({author:'Jay'}, function(err){if(err) throw err;console.log('删除成功');mongoose.connection.close();
});

5.6.3 更新

更新一条数据

SongModel.updateOne({author: 'JJ Lin'}, {author: '林俊杰'}, function (err) {if(err) throw err;mongoose.connection.close();
});

批量更新数据

SongModel.updateMany({author: 'Leehom Wang'}, {author: '王力宏'}, function (err) {if(err) throw err;mongoose.connection.close();
});

5.6.4 查询

查询一条数据

SongModel.findOne({author: '王力宏'}, function(err, data){if(err) throw err;console.log(data);mongoose.connection.close();
});//根据 id 查询数据SongModel.findById('5dd662b5381fc316b44ce167',function(err, data){if(err) throw err;console.log(data);mongoose.connection.close();
});

批量查询数据

//不加条件查询SongModel.find(function(err, data){if(err) throw err;console.log(data);mongoose.connection.close();
});//加条件查询SongModel.find({author: '王力宏'}, function(err, data){if(err) throw err;console.log(data);mongoose.connection.close();
});

5.7 条件控制

5.7.1 运算符

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

  • >使用$gt
  • <使用$lt
  • >=使用$gte
  • <=使用$lte
  • !==使用$ne

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

5.7.2 逻辑运算

$or逻辑或的情况

db.students.find({$or:[{age:18},{age:24}]});

$and逻辑与的情况

db.students.find({$and: [{age: {$lt:20}}, {age: {$gt: 15}}]});

5.8 个性化读取

5.8.1 字段筛选

//0:不要的字段//1:要的字段SongModel.find().select({_id:0,title:1}).exec(function(err,data){if(err) throw err;console.log(data);mongoose.connection.close();
});

5.8.2 数据排序

//sort 排序//1:升序//-1:倒序SongModel.find().sort({hot:1}).exec(function(err,data){if(err) throw err;console.log(data);mongoose.connection.close();
});

5.8.3 数据截取

//skip 跳过 limit 限定SongModel.find().skip(10).limit(10).exec(function(err,data){if(err) throw err;console.log(data);mongoose.connection.close();
});

六、图形化管理工具

我们可以使用图形化的管理工具来对 Mongodb 进行交互,这里演示两个图形化工具

Robo 3T 免费https://github.com/Studio3T/robomongo/releases

Navicat 收费https://www.navicat.com.cn/

相关文章:

Node学习笔记之MongoDB

一、简介 1.1 Mongodb 是什么 MongoDB 是一个基于分布式文件存储的数据库&#xff0c;官方地址 MongoDB: The Developer Data Platform | MongoDB 1.2 为什么选择 Mongodb 操作语法与 JavaScript 类似&#xff0c;容易上手&#xff0c;学习成本低 二、核心概念 Mongodb 中…...

awtk用C语言开发串口通信示例

awtk开发工具封装了串口&#xff0c;可以方便的异步调用&#xff0c;就做个程序试一下吧 在deepinlinux20.9版本调试通过&#xff0c;开始第一步先给系统增加usb串口线驱动 https://download.csdn.net/download/qiaozhangchi/87463972 串口控件ide里没有&#xff0c;需要自己…...

CICD 流程学习(五)Jenkins后端工程构建

案例1&#xff1a;数据库服务部署 MySQL部署 #安装MySQL服务 [rootServices ~]# yum clean all; yum repolist -v ... Total packages: 8,265 [rootServices ~]# yum -y install mysql.x86_64 mysql-server.x86_64 mysql-devel.x86_64 ... Complete! [rootServices ~]# #启动…...

NSS [SWPUCTF 2021 新生赛]sql

NSS [SWPUCTF 2021 新生赛]sql 很明显是sql&#xff0c;有waf。 参数是wllm get型传参&#xff0c;有回显&#xff0c;单引号闭合&#xff0c;回显位3 跑个fuzz看看waf 过滤了空格 and 报错注入 空格->%09 ->like and->&&爆库&#xff1a;test_db -1%27uni…...

【Python机器学习】零基础掌握RandomTreesEmbedding集成学习

如何在高维数据中找到隐藏的结构? 面临大量复杂、高维的数据,例如社交网络分析、电子商务推荐系统或医疗诊断,如何有效地分析和解读这些数据成为一大挑战。一个有效的方法是使用嵌入技术将高维数据转化为低维形式,同时保留其内在结构。这次将介绍一种称为“随机树嵌入”(…...

【C++基础入门】42.C++中同名覆盖引发的问题

一、父子间的赋值兼容 子类对象可以当作父类对象使用&#xff08;兼容性) 子类对象可以直接赋值给父类对象子类对象可以直接赋值给父类对象父类指针可以直接指向子类对象父类引用可以直接引用子类对象 下面看一个子类对象兼容性的代码&#xff1a; #include <iostream>…...

【C++学习笔记】类和对象(上)

目录 1. 面向对象和面向过程的初步认识 2. 类的引入 3. 类的定义 3.1 类的两种定义方式 3.1.1声明和定义全部放在类体中 3.1.2.类声明放在.h文件中&#xff0c;成员函数定义放在.cpp文件中 4. 类的访问限定符及封装 4.1 访问限定符 4.2 面试题&#xff1a;C中struct…...

TinySnippet轻UI组件开发系列教程 — DataGrid选择事件

应用场景 DataGrid选择一条记录后&#xff0c;希望能够 调用纳流或者打开指定的页面 或者当鼠标悬停在一行时弱出一个指定的页面在右下角&#xff08;移开就关闭弹出页&#xff09; 这些都是我们能够实现的 实现过程 本文以调用纳流为例 下载UI组件 TinySnippet-v4.1.2导…...

热搜榜:最热门的话题文本排行榜API接口

近年来&#xff0c;随着社交媒体的兴起&#xff0c;热门话题的数量和更新速度都在不断增加&#xff0c;因此热门话题排行榜的需求也越来越大。在这篇文章中&#xff0c;我们将探讨如何使用#热搜榜# API接口获取最热门的话题文本排行榜&#xff0c;并给出相关代码示例。 一、API…...

vue中替换全局字体

一、背景 产品说项目要拿去展会展示&#xff0c;但现在项目字体是微软雅黑&#xff0c;不支持商用&#xff0c;需要全局替换思源字体。 二、下载字体 推荐一个网址&#xff0c;好用 字体天下&#xff0c;点击跳转 下载好的文件如下&#xff1a; 三、引入字体 1、在项目…...

【AGC】.p12证书文件如何获取MD5

近期在使用DevEco Studio3.1打包应用时遇到了一个问题&#xff0c;我使用Build—Generate Key and CSR创建了密钥库文件。 我这里需要获取到创建的.p12证书文件的MD5值&#xff0c;于是在控制台使用了keytool -list -v -keystore D:\myapp.p12命令获取证书指纹&#xff0c;但是…...

vue2 quill 视频上传 ,基于ruoyi vue,oss

包含两种上传方式&#xff0c;第一种点开弹新页面可选url和点击上传。本文中是第二种&#xff0c;自己拼的。像点击上传图片一样&#xff0c;直接传video文件&#xff0c;原创不易&#xff0c;纯纯踩坑&#xff1b; 因为现阶段能搜索到的内容&#xff0c;99.5%都是一样的内容&…...

YOLOv8改进实战 | 更换损失函数之MPDIOU(2023最新IOU)篇

前言 YOLOv8官方默认损失函数采用的是CIoU。本章节主要介绍如何将MPDIoU损失函数应用于目标检测YOLOv8模型。 目录 一、MPDIoU二、代码实现添加损失函数更换损失函数一、MPDIoU 论文链接:MPDIoU: A Loss for Efficient and Accurate Bounding Box Regression MPDIoU是一种基于…...

图的应用1.0-----最小生成树问题

目录 前言 生成树 1.基本概念 2.生成树的特点 3.生成树形成过程 最小生成树(Minimum Spanning Tree) 1.基本概念 2.构造方法&#xff08;MST&#xff09; 普里姆(Prime)算法 1.算法思想 2.代码实现 克鲁斯卡尔&#xff08;Kruskal&#xff09;算法 1.算法思想 2.代码…...

【计算机网络笔记】网络应用对传输服务的需求

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…...

IDEA启动报错:Command line is too long的解决办法

文章目录 1.报错现象2.解决办法验证3.最佳实践4.问题原因5.参考文献1.报错现象 在idea中启动一个spring cloud项目时,编译完成后直接报错,报错内容如下: Error running XXXApplication:Command line is too long. Shorten command line for XXXApplication or also for Sp…...

Android 中的 本地广播LocalBroadcastManager

Android 中的 本地广播LocalBroadcastManager 文章目录 Android 中的 本地广播LocalBroadcastManager一、LocalBroadcastManager 的基本作用二 、LocalBroadcastManager 的基本使用1、包的导入&#xff08;1&#xff09;Android 源码中bp文件的导入&#xff1a;&#xff08;2&a…...

题目 1120: C语言训练-“水仙花数“问题2python详解)——练气三层后期

✨博主&#xff1a;命运之光 &#x1f984;专栏&#xff1a;算法修炼之练气篇&#xff08;C\C版&#xff09; &#x1f353;专栏&#xff1a;算法修炼之筑基篇&#xff08;C\C版&#xff09; &#x1f352;专栏&#xff1a;算法修炼之练气篇&#xff08;Python版&#xff09; ✨…...

sheng的学习笔记-【中】【吴恩达课后测验】Course 3 - 结构化机器学习项目 - 第二周测验

课程3_第2周_测验题 目录&#xff1a;目录 要解决的问题 ① 为了帮助你练习机器学习的策略&#xff0c;本周我们将介绍另一个场景&#xff0c;并询问你将如何行动。 ② 我们认为这个在机器学习项目中工作的“模拟器”将给出一个任务&#xff0c;即领导一个机器学习项目可能…...

基于Pytorch的驾驶员分心行为实时检测

本文使用深度学习和Pytorch(PyTorch 2.0.1\Torchvision 0.15.2)实时检测驾驶员的分心行为,并附录完整代码。 检测分心驾驶是现代汽车中最重要的功能之一。无论是自动驾驶汽车还是其它高端汽车,都配备了驾驶员监控系统,以持续跟踪驾驶员的行为。这对确保驾驶员保持目光在道路…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...

深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向

在人工智能技术呈指数级发展的当下&#xff0c;大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性&#xff0c;吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型&#xff0c;成为释放其巨大潜力的关键所在&…...

小木的算法日记-多叉树的递归/层序遍历

&#x1f332; 从二叉树到森林&#xff1a;一文彻底搞懂多叉树遍历的艺术 &#x1f680; 引言 你好&#xff0c;未来的算法大神&#xff01; 在数据结构的世界里&#xff0c;“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的&#xff0c;它…...

C++_哈希表

本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、基础概念 1. 哈希核心思想&#xff1a; 哈希函数的作用&#xff1a;通过此函数建立一个Key与存储位置之间的映射关系。理想目标&#xff1a;实现…...