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

Mongodb学习

在这里插入图片描述

一、初步了解

1.1 Mongodb 是什么

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

1.2 数据库是什么

数据库(DataBase)是按照数据结构来组织、存储和管理数据的 应用程序

1.3 数据库的作用

数据库的主要作用就是 管理数据 ,对数据进行 增(c)、删(d)、改(u)、查(r)

1.4 数据库管理数据的特点

相比于纯文件管理数据,数据库管理数据有如下特点:

  • 速度更快(数据库往往借助内存作为缓存)
  • 扩展性更强
  • 安全性更强
  • JavaScript 类似,容易上手,学习成本低。

二、核心概念

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

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

2.1 理解

通过 JSON 文件来理解 Mongodb 中的概念

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

. 一般情况下
. - 一个项目使用一个数据库
. - 一个集合会存储同一种类型的数据

2.2 下载安装、启动

下载地址: https://www.mongodb.com/try/download/community
建议选择 zip 类型, 通用性更强
在这里插入图片描述
配置步骤如下:

  1. 将压缩包移动到 C:\Program Files 下,然后解压
  2. 创建 C:\data\db 目录,mongodb 会将数据默认保存在这个文件夹
  3. 以 mongodb 中 bin 目录作为工作目录,启动命令行
  4. 运行命令 mongod(相当于运行mondod.exe文件)在这里插入图片描述
    看到最后的 waiting for connections 则表明服务 已经启动成功

现在是服务端!!!!
在这里插入图片描述
现在的服务端是mongodb服务,支持mongodb协议
. 重新打开一个窗口,使用 mongo 命令连接本机的 mongodb 服务

现在是客户端!!!!!
在这里插入图片描述

注意:

  • 为了方便后续方便使用 mongod 命令,可以将 bin 目录配置到环境变量 Path 中
  • 千万不要选中服务端窗口的内容 ,选中会停止服务,可以 敲回车 取消选中

三、数据库与集合命令

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

3.1 数据库命令

  1. 显示所有数据库show dbs
  2. 切换到指定的数据库use dbs,如果数据库不存在会自动创建数据库(不过要在数据库有内容时,才会显示,否则还是不显示)在这里插入图片描述

在上述数据库创建一个集合后,再使用show dbs这里是引用

  1. 显示当前所在的数据库db
  2. 删除当前数据库
use 库名
db.dropDatabase()

3.2 集合命令

  1. 创建集合db.createCollection('集合名称')
  2. 显示当前数据库中的所有集合show collections
  3. 删除某个集合db.集合名.drop()
  4. 重命名集合db.集合名.renameCollection('newName')
    在这里插入图片描述

3.3 文档命令

  1. 插入文档db.集合名.insert(文档对象);
  2. 查询文档db.集合名.find(查询条件)(_id 是 mongodb 自动生成的唯一编号,用来唯一标识文档)
  3. 更新文档
db.集合名.update(查询条件,新的文档)
db.集合名.update({name:'张三'},{$set:{age:19}})
  1. 删除文档db.集合名.remove(查询条件)

在这里插入图片描述

3.4 应用场景

  1. 新增
    用户注册
    发布视频
    发布商品
    发朋友圈
    发评论
    发微博
    发弹幕
  2. 删除
    删除评论
    删除商品
    删除文章
    删除视频
    删除微博
  3. 更新
    更新个人信息
    修改商品价格
    修改文章内容
  4. 查询
    商品列表
    视频列表
    朋友圈列表
    微博列表
    搜索功能

四、Mongoose

4.1 介绍

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

4.2 作用

方便使用代码操作 mongodb 数据库
在这里插入图片描述

另一种交互方式 : 我们在命令行使用mongo

4.3 初体验

  1. 初始化 npm init
  2. 安装mongoose包npm i mongoose在这里插入图片描述

mongo服务器的默认端口是27017

> show dataBase1
uncaught exception: Error: don't know how to show [dataBase1] :
shellHelper.show@src/mongo/shell/utils.js:1211:11
shellHelper@src/mongo/shell/utils.js:838:15
@(shellhelp2):1:1
> use dataBase1
switched to db dataBase1
> db.createCollection('collect1')
{ "ok" : 1 }
> db.collect1.insert({name:'lucy',age:20})
WriteResult({ "nInserted" : 1 })
> db.collect1.insert({name:'flavia',age:19})
WriteResult({ "nInserted" : 1 })
> db.collect1.insert({name:'ping',age:22})
WriteResult({ "nInserted" : 1 })
> db.collect1.find()
{ "_id" : ObjectId("6512d475aa0c865bbe64a957"), "name" : "lucy", "age" : 20 }
{ "_id" : ObjectId("6512d488aa0c865bbe64a958"), "name" : "flavia", "age" : 19 }
{ "_id" : ObjectId("6512d495aa0c865bbe64a959"), "name" : "ping", "age" : 22 }
> show dbs
admin      0.000GB
config     0.000GB
dataBase1  0.000GB
local      0.000GB

在这里插入图片描述

报错在这里插入图片描述
!!!!!!!!!!
一定要进入当前路径!!!!!!!!!!在这里插入图片描述

//导入mongoose
const mongoose=require('mongoose')
//连接mongodb服务
//协议名://主机:端口/数据库名
mongoose.connect('mongodb://127.0.0.1:27017/dataBase1')
// 设置连接成功的回调
// on绑定事件
mongoose.connection.on('open',()=>{console.log('连接成功')
});
// 设置连接失败的回调
mongoose.connection.on('error',()=>{console.log('连接失败')
});
// 设置连接关闭的回调
mongoose.connection.on('close',()=>{console.log('连接关闭')
});
//设置定时关闭连接
setTimeout(()=>{mongoose.disconnect()
},3000)

在这里插入图片描述

官方推荐使用once进行连接

//官方推荐使用once
mongoose.connection.once('open',()=>{console.log('连接成功')
});

4.4 使用流程

【弹幕】最新版本不支持这种回调函数方法,只能用.then((data)=>{})的方法了。
在这里插入图片描述

const mongoose = require('mongoose')
mongoose.connect('mongodb://127.0.0.1:27017/dataBase1')
// 设置连接成功的回调
//官方推荐使用once(在open时)
mongoose.connection.once('open', async () => {// 创建文档的结构对象————设置集合中文档的属性 以及属性值的类型let collect2Schema = new mongoose.Schema({name: String,author: String,price: Number})// 创建模型对象————对文档操作的封装对象// 参数(集合名称,结构对象)let collect2Model = mongoose.model('collect2', collect2Schema)try {const data = await collect2Model.create({name: 'a书',author: 'lucy',price: 19.9});console.log(data);console.log('连接成功');} catch (err) {console.log(err);}console.log('连接成功')
});// 设置连接失败的回调
mongoose.connection.on('error', () => {console.log('连接失败')
});
// 设置连接关闭的回调
mongoose.connection.on('close', () => {console.log('连接关闭')
});

4.5 字段类型

类型描述
String字符串
Number数字
Boolean布尔值
Array数组,也可以使用 [] 来标识
Date日期
BufferBuffer 对象
Mixed任意类型,需要使用 mongoose.Schema.Types.Mixed 指定
ObjectId对象 ID,需要使用 mongoose.Schema.Types.ObjectId 指定
Decimal128高精度数字,需要使用 mongoose.Schema.Types.Decimal128 指定

类型不一致,导致报错
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.6 字段值验证

(1)必填项

let collect2Schema = new mongoose.Schema({name: {type:String,required:true},author: String,price: Number,isHot:Boolean})let collect2Model = mongoose.model('collect2', collect2Schema)// 新增try {const data = await collect2Model.create({name: 'a书',author: 'lucy',price: 19.9,})console.log(data);console.log('连接成功');} catch (err) {console.log(err);}

在这里插入图片描述
正常输出

如果注释掉,name,则报错
在这里插入图片描述

(2)默认值

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

(3) 枚举值

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

(4)唯一值

要插入的这个值必须是独一无二的,不能有重复的此条数据。

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

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

4.7 增删改查

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

4.8 模块化

暴露函数
在这里插入图片描述

五、图形化工具

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

  • Robo 3T 免费 https://github.com/Studio3T/robomongo/releases
  • Navicat 收费 https://www.navicat.com.cn/

相关文章:

Mongodb学习

一、初步了解 1.1 Mongodb 是什么 MongoDB 是一个基于分布式文件存储的数据库,官方地址 https://www.mongodb.com/ 1.2 数据库是什么 数据库(DataBase)是按照数据结构来组织、存储和管理数据的 应用程序 1.3 数据库的作用 数据库的主要…...

2024届计算机毕业生福利来啦!Python毕业设计选题分享Django毕设选题大全Flask毕设选题最易过题目

💕💕作者:计算机源码社 💕💕个人简介:本人七年开发经验,擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等,大家有这一块的问题可以一起交流! 💕&…...

网络爬虫指南

一、定义 网络爬虫,是按照一定规则,自动抓取网页信息。爬虫的本质是模拟浏览器打开网页,从网页中获取我们想要的那部分数据。 二、Python为什么适合爬虫 Python相比与其他编程语言,如java,c#,C&#xff…...

9、媒体元素标签

9、媒体元素标签 一、视频元素 video标签 二、音频元素 audio标签 <!--音频和视频 video&#xff1a;视频标签 audio&#xff1a;音频标签 controls&#xff1a;控制选项&#xff0c;可以显示进度条 autoplay&#xff1a;自动播放 -->示例 <!DOCTYPE html> &…...

php单独使用think-rom数据库 | thinkphp手动关闭数据库连接

背景&#xff08;think-orm2.0.61&#xff09; 由于需要长时间运行一个php脚本&#xff0c;而运行过程并不是需要一直与数据库交互&#xff0c;但thinkphp主要是为web站点开发的框架&#xff0c;而站点一般都是数据获取完则进程结束&#xff0c;所以thinkphp没提供手动关闭数据…...

337. 打家劫舍 III

题目描述 小偷又发现了一个新的可行窃的地区。这个地区只有一个入口&#xff0c;我们称之为 root 。 除了 root 之外&#xff0c;每栋房子有且只有一个“父“房子与之相连。一番侦察之后&#xff0c;聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果 两…...

tio-websocket-spring-boot-starter的最简单实例,看完你一定有所收获

前言 我最近一个月一直在寻找能够快速开发实时通讯的简单好用的模块,所以我就去寻找了一下相关的内容.在此之前我使用的是Spring原生的webSocket,她有个弊端就是设置组不容易设置,而且配置上也稍微复杂一点,需要配置拦截器和处理器,还需要把它放入到Springboot的启动容器里面,也…...

列出连通集

输入样例: 8 6 0 7 0 1 2 0 4 1 2 4 3 5 输出样例: { 0 1 4 2 7 } { 3 5 } { 6 } { 0 1 2 7 4 } { 3 5 } { 6 } solution #include <stdio.h> #include <string.h> int arcs[10][10]; int visited[10] {0}; void DFS(int n, int v); void BFS(int n , int i)…...

前端 富文本编辑器原理——从javascript、html、css开始入门

文章目录 ⭐前言⭐html的contenteditable属性&#x1f496; 输入的光标位置&#xff08;浏览器获取selection&#xff09;⭐使用Selection.toString () 返回指定的文本⭐getRangeAt 获取指定索引范围 &#x1f496; 修改光标位置&#x1f496; 设置选取range ⭐总结⭐结束 ⭐前…...

堆--数据流中第K大元素

如果对于堆不是太认识&#xff0c;请点击&#xff1a;堆的初步认识-CSDN博客 数据流与上述堆--数组中第K大元素-CSDN博客的数组区别&#xff1a; 数据流的数据是动态变化的&#xff0c;数组是写死的 堆--数组中第K大元素-CSDN博客题的小顶堆加一个方法&#xff1a; class MinH…...

【算法|动态规划No.12】leetcode152. 乘积最大子数组

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…...

Covert Communication 与选择波束(毫米波,大规模MIMO,可重构全息表面)

Covert Communication for Spatially Sparse mmWave Massive MIMO Channels 2023 TOC abstract 隐蔽通信&#xff0c;也称为低检测概率通信&#xff0c;旨在为合法用户提供可靠的通信&#xff0c;并防止任何其他用户检测到合法通信的发生。出于下一代通信系统安全链路的强烈…...

计算机毕业设计 基于协调过滤算法的绿色食品推荐系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…...

华为云云耀云服务器L实例评测|部署在线影音媒体系统 Jellyfin

华为云云耀云服务器L实例评测&#xff5c;部署在线影音媒体系统 Jellyfin 一、云耀云服务器L实例介绍1.1 云服务器介绍1.2 产品规格1.3 应用场景1.4 支持镜像 二、云耀云服务器L实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 Jellyfin3.1 Jellyfin 介绍3.2 Docke…...

GhostNet原理解析及pytorch实现

论文&#xff1a;https://arxiv.org/abs/1911.11907 源码&#xff1a;https://github.com/huawei-noah/ghostnet 简要论述GhostNet的核心内容。 Ghost Net 1、Introduction 在训练良好的深度神经网络的特征图中&#xff0c;丰富甚至冗余的信息通常保证了对输入数据的全面理…...

视频二维码的制作方法,支持内容修改编辑

现在学生经常会需要使用音视频二维码&#xff0c;比如外出打开、才艺展示、课文背诵等等。那么如何制作一个可以长期使用的二维码呢&#xff1f;下面来给大家分享一个二维码制作&#xff08;免费在线二维码生成器-二维码在线制作-音视频二维码在线生成工具-机智熊二维码&#x…...

清华GLM部署记录

环境部署 首先安装anaconda&#xff08;建议包管理比较方便&#xff09;windows用户需手动配置一下环境变量&#xff0c;下面默认是在ubuntu环境说明创建python环境&#xff0c;conda create -n your_env_name python3.10 (注&#xff1a;官方是提供是python3.8&#xff0c;但…...

贪心算法+练习

正值国庆之际&#xff0c;祝愿祖国繁荣昌盛&#xff0c;祝愿朋友一生平安&#xff01;终身学习&#xff0c;奋斗不息&#xff01; 目录 1.贪心算法简介 2.贪心算法的特点 3.如何学习贪心算法 题目练习&#xff08;持续更新&#xff09; 1.柠檬水找零&#xff08;easy&…...

使用华为eNSP组网试验⑷-OSPF多区域组网

今天进行了OSPF的多区域组网试验&#xff0c;本来这是个很简单的操作&#xff0c;折腾了好长时间&#xff0c;根本原因只是看了别人写的配置代码&#xff0c;没有真正弄明白里面对应的规则。 一般情况下&#xff0c;很多单位都使用OSPF进行多区域的组网&#xff0c;大体分为1个…...

P1843 奶牛晒衣服 【贪心】

P1843 奶牛晒衣服 【贪心】 题目背景 熊大妈决定给每个牛宝宝都穿上可爱的婴儿装 。但是由于衣服很湿&#xff0c;为牛宝宝晒衣服就成了很不爽的事情。于是&#xff0c;熊大妈请你&#xff08;奶牛&#xff09;帮助她完成这个重任。 题目描述 一件衣服在自然条件下用一秒的时间…...

91、Redis - 事务 与 订阅-发布 相关的命令 及 演示

★ 事务相关的命令 Redis事务保证事务内的多条命令会按顺序作为整体执行&#xff0c;其他客户端发出的请求绝不可能被插入到事务处理的中间&#xff0c; 这样可以保证事务内所有命令作为一个隔离操作被执行。 Redis事务同样具有原子性&#xff0c;事务内所有命令要么全部被执…...

GPU如何成为AI的加速器

0. 前言 按照国际惯例&#xff0c;首先声明&#xff1a;本文只是我自己学习的理解&#xff0c;虽然参考了他人的宝贵见解&#xff0c;但是内容可能存在不准确的地方。如果发现文中错误&#xff0c;希望批评指正&#xff0c;共同进步。 本文关键词&#xff1a;GPU、深度学习、GP…...

Map声明、元素访问及遍历、⼯⼚模式、实现 Set - GO语言从入门到实战

Map声明、元素访问及遍历 - GO语言从入门到实战 Map 声明的方式 m := map[string]int{"one": 1, "two": 2, "three": 3} //m初始化时就已经设置了3个键值对,所以它的初始长度len(m)是3。m1 := map[string]int{} //m1被初始化为一个空的m…...

机器人中的数值优化|【七】线性搜索牛顿共轭梯度法、可信域牛顿共轭梯度法

机器人中的数值优化|【七】线性搜索牛顿共轭梯度法、可信域牛顿共轭梯度法 Line Search Newton-CG, Trust Region Newton-CG 往期回顾 机器人中的数值优化|【一】数值优化基础 机器人中的数值优化|【二】最速下降法&#xff0c;可行牛顿法的python实现&#xff0c;以Rosenbro…...

websocket实现go(server)与c#(client)通讯

go 服务端 使用到github.com/gorilla/websocket package mainimport ("fmt""github.com/gorilla/websocket""log""net/http" )func main() {var upgrader websocket.Upgrader{ReadBufferSize: 1024,WriteBufferSize: 1024,CheckOr…...

洛谷题目题解详细解答

洛谷是一个很不错的刷题软件&#xff0c;可是找不到合适的题解是个大麻烦&#xff0c;大家有啥可以私信问我&#xff0c;以下是我已经通过的题目。 你如果有哪一题不会&#xff08;最好是我通过过的&#xff0c;我没过的也没关系&#xff09;&#xff0c;可以私信我&#xff0…...

【C语言】八大排序算法

文章目录 一、冒泡排序1、定义2、思想及图解3、代码 二、快速排序1、hoare版本2、挖坑法3、前后指针法4、非递归快排5、快速排序优化1&#xff09;三数取中选key值2&#xff09;小区间优化 三、直接插入排序1、定义2、代码 四、希尔排序1、定义2、图解3、代码 五、选择排序1、排…...

2023年中国智能电视柜产量、需求量、市场规模及行业价格走势[图]

电视柜是随着电视机的发展和普及而演变出的家具种类&#xff0c;其主要作用是承载电视机&#xff0c;又称视听柜&#xff0c;随着生活水平的提高&#xff0c;与电视机相配套的电器设备也成为电视柜的收纳对象。 随着智能家具的发展&#xff0c;智能电视机柜的造型和风格都是有了…...

docker容器使用初体验

我们写程序时&#xff0c;都会搭建相关的环境&#xff0c;比如写了一个web&#xff0c;使用了tomcat、nginx等&#xff0c;现在想要把程序部署到云服务器或者在其他电脑上运行&#xff0c;就需要重新部署一遍环境&#xff0c;尤其是项目开源后&#xff0c;上手成本大。 docker…...

React Hooks ——性能优化Hooks

什么是Hooks Hooks从语法上来说是一些函数。这些函数可以用于在函数组件中引入状态管理和生命周期方法。 React Hooks的优点 简洁 从语法上来说&#xff0c;写的代码少了上手非常简单 基于函数式编程理念&#xff0c;只需要掌握一些JavaScript基础知识与生命周期相关的知识不…...

网站对比分析/十大最免费软件排行榜

匿名用户1级2010-04-29 回答c语言的输出输入是格式化的&#xff0c;printf表示输出&#xff0c;在屏幕上打印出来&#xff1b;scanf表示读入&#xff0c;即把你在屏幕上如果打10&#xff0c;按回车&#xff0c;10就存储到month那个变量里面&#xff0c;%d代表输入一个整数。还有…...

网站推广具体内容简要说明/营销推广的特点

废话不多说&#xff0c;首先上效果图。效果图用途搞活动、年会的时候&#xff0c;在大屏幕上实时显示留言、吐槽。在视频网站上&#xff0c;将大家的吐槽实时展示出来。...原理其他原理挺简单的&#xff0c;就是将大家的留言实时展示出来。注意点&#xff1a;实时性、动画效果、…...

徐州网站建设推广/店铺在百度免费定位

math函数的属性 Math.PI:返回圆周率。 math函数的方法 绝对值: Math.abs();对数进行上舍入: Math.ceil();对数进行下舍入: Math.floor();Math.pow(x, y); x的y次幂&#xff0c;y可以是分数求最大最小值&#xff1a;Math.max();和Math.min(); max和min方法中可以有多个值。随机数…...

网站建设课件/网图搜索识别

说实话&#xff0c;不知道这样的程序还有没有实际价值&#xff1f;也就是说&#xff0c;有没有人在实际的出入库业务中使用这样的Excel程序来辅助业务&#xff1f; Sub 入库录入()Dim arr, arr1, x As Integer, mydate As Date, hm As String, sr As String, sql As StringDim …...

网页设计作品评价/seo优化的作用

分析&#xff1a;该题是经典的动态规划题目。 题目中涉及到卡片数、卡片分4类、格子数等若干信息,又每张卡片仅能使用一次。求到达终点最多能能获得多少分。 从题目中可知卡片的使用顺序影响最终得分&#xff0c;我们可知状态转移和使用哪种类型的卡片有关&#xff0c;假设我们…...

如何免费自己做网站/长春seo公司

文章目录1 Overview1.1 LocalRDDCheckpointData1.2 ReliableRDDCheckpointData2 Checkpoint尝试3 Summary1 Overview 当第一次碰到 Spark&#xff0c;尤其是 Checkpoint 的时候难免有点一脸懵逼&#xff0c;不禁要问&#xff0c;Checkpoint 到底是什么。所以&#xff0c;当我们…...