MongoDB简介

一.MongoDB相关概念

1.1.简介

MongoDB是一个开源,高性能,无模式的文档性数据库,当初的设计就是用于简化开发和方便扩展,是NoSQL数据库产品中的一种。是最像关系型数据库(MySQL)的非关系数据库。

它支持的数据结构非常松散,是一种类似于json的格式叫BSON,所以它既可以储存比较复杂的数据类型,又相当灵活

MongoDB中的记录是一个文档,它是一个由字段和值对(field:value)组成的数据结构。MongoDB文档类似于jSON对象,即一个文档认为就是一个对象。字段的数据类型是字符型,他的值除了使用基本的一些类型外,还可以包括其他文档,普通数组和文档数组。

1.2.体系结构

MYSQL和MongDB对比

SQL术语/概念MongDB术语/概念解释/说明
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
table  joins表连接,MongDBb不支持
嵌入文档MongoDB通过嵌入式文档来代替多表连接
primary  keyprimary  key主键,MongoDB自动将_id字段设置为主键

1.3数据模型

二.基本常用命令

2.1.启动MongoDB数据库

1.在bin目录中打开命令提示符,输入如下命令:

mongod --dbpath=..\data\db

2.配置文件启动服务

客户端连接MongoDB

1.到MongoDB官网下载MongoDB Compass并连接

2.在navicat中连接MongoDB

2.2默认保留的数据库

·admin:  从权限角度考虑,这是root数据库,如果将一个用户添加到这个数据库,这个用户自动继承所以数据库的权限,一些特定的服务端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器

·local:数据永远不会被复制,可以用来储存于本地的单台服务器的集合(部署集群,分片等)

·config:Mongo用于分片设置时,config数据库在内部使用,用来保存分片的相关信息

show   dbs

use   articledb

db

当使用use  articledb 的时候,articledb其实存放在内存中,只有数据库存一个集合collection之后,mongodb才会将这个数据库持久化到硬盘中。

2.3基本的CRUD

2.3.1创建文档

使用insert()或者save()方法向集合中插入文档,语法如下:

db.collection.insert({

"a":" ",

"b":1

})

使用insertMany()方法进行批量插入

db.collection.insertMany([

{<document 1>},

{<document 2>}

])

2.3.2删除文档

删除文档的语法结构:

db.集合名称.remove(条件)

以下语句可以将数据全部删除

db.comment.remove({})

例如:

db.comment.remove({_id:"1"})

2.3.3修改文档

(1)覆盖的修改


如果我们想修改_id为1的记录,点赞量为1001,输入以下语句:
数据库注释.update({_id:“1”},{ikenum:NumberInt(1001)})
执行后,我们会发现,这条文档除了likenum字段其它字段都不见了

(2)同部修改


为了解决这个问题,我们需要使用修改器$set来实现,命令如下:
我们想修改id为2的记录,浏览量为889,输入以下语句:
DB.COMMENT.UPDATE( _id:“2”},{$set:{likenum:NumberInt(889)}})
这样就OK啦。


(3)批量的修改


更新所有用户为1003的用户的昵称为凯撒大帝。
//默认只修改第一条数据
db.comment.update({userid:“1003”},{$set:{NickName:“凯撒2”}})
//修改所有符合条件的数据
db.comment.update({userid:“1003”},{$set:{NickName:“凯撒大帝”}},{mult:true})
提示:如果不加后面的参数,则只更新符合条件的第一条记录

2.3.4查找文档

查询所有

db.comment.find()或db.comment.find({})

每条文档会有一个_id的字段,相当于关系数据库中表的主键,当你插入文档记录时没有指定

该字段,MongoDB会自动创建,类型为ObjectID类型

查询单个

db.comment.find({ userid:' 1 '})

db.comment.findOne({ userid:' 1 ' })  (只查找符合条件的第一条)

排序查询

db.collection.find().sort({KEY:1})

或db.集合名称.find().sort(排序方式)

例:db.comment.find().sort({userid:-1 , likenum:1})   (1为升序排列,2为降序排列)

skip(),limilt(),sort()三个放在一起执行的时候,执行的顺序是先sort(),然后skip(),最后是显示的limit(),和命令编写顺序无关。

分页查询

db.collection.count(query,options)

db.collection.find().limit(number).skip(number)---------limit返回几条数据,skip跳过几条数据

ParameterTypeDescription
querydocument查询选择条件
optionsdocument可选。用于修改计数的额外选项

投影查询

db.comment.find({userid:"1002"},{userid:1,nickname:1})

查询结果只显示_id,userid,nickname,如若不想现实_id,  将_id:0加入

正则的复杂条件查询

db.collection.find({ field:/正则表达式/})

db.集合.find({字段:/正则表达式/})

db.comment.find({content:/开水/})    查询评论内容包含“开水”的所有文档

db.comment.find({content:/^专家/})   查询评论内容的以”开水“开头的文档

比较查询

db.集合名称.find({ "field":{ $gt: value }})    // 大于:field > value

db.集合名称.find({ "field":{ $lt:  value }})    // 小于:field < value

db.集合名称.find({ "field":{ $gte:  value }})    // 大于等于:field >= value

db.集合名称.find({ "field":{ $lte:  value }})    // 小于等于:field <= value

db.集合名称.find({ "field":{ $ne:  value }})    // 不等于:field != value

如:db.comment.find({ likenum:{ $gt :NumberInt(700)}})

包含查询

示例:查询评论的集合中userid字段包含1003或1004的文档

db.comment.find({userid: { $in : ["1003","1004"]}})

如若查询评论集合中userid字段不包含1003和1004的文档,只需将 in 换成  nin

条件连接查询

$and : [{  } , {  } , {  }]

示例:查询评论集合中likenum大于等于700且小于2000的文档:

db.commnet.find( { $and : [ { likenum:{  $gte : NumberInt(700) } }  ,  {likenum:{$lt : NumberInt(2000) } } ] } )

如果两个条件以上是或者关系,使用方式与and一样,把 and 换为 or

三.索引

3.1概述

索引支持在 MongoDB 中高效地执行查询.如果没有索引, MongoDB 必须执行全集合扫描, 即扫描集合中的每个文档, 以选择与查询语句 匹配的文档.这种扫描全集合的查询效率是非常低的, 特别在处理大量的数据时, 查询可以要花费几十秒甚至几分钟, 这对网站的性能是非常致命的.

如果查询存在适当的索引, MongoDB 可以使用该索引限制必须检查的文档数.

索引是特殊的数据结构, 它以易于遍历的形式存储集合数据集的一小部分.索引存储特定字段或一组字段的值, 按字段值排序.索引项的排 序支持有效的相等匹配和基于范围的查询操作.此外, MongoDB 还可以使用索引中的排序返回排序结果.

MongoDB 使用的是 B Tree, MySQL 使用的是 B+ Tree

3.2索引的类型

单字段索引

MongoDB 支持在文档的单个字段上创建用户定义的升序/降序索引, 称为单字段索引 Single Field Index

对于单个字段索引和排序操作, 索引键的排序顺序(即升序或降序)并不重要, 因为 MongoDB 可以在任何方向上遍历索引.

复合索引

MongoDB 还支持多个字段的用户定义索引, 即复合索引 Compound Index

复合索引中列出的字段顺序具有重要意义.例如, 如果复合索引由 { userid: 1, score: -1 } 组成, 则索引首先按 userid 正序排序, 然后 在每个 userid 的值内, 再在按 score 倒序排序.

其他索引

地理空间索引 Geospatial Index
文本索引 Text Indexes
哈希索引 Hashed Indexes

3.3索引管理操作

索引的查看

db.collection.getIndexes()


默认 _id 索引: MongoDB 在创建集合的过程中, 在 _id 字段上创建一个唯一的索引, 默认名字为 _id , 该索引可防止客户端插入两个具有相同值的文 档, 不能在 _id 字段上删除此索引.

注意:该索引是唯一索引, 因此值不能重复, 即 _id 值不能重复的.

在分片集群中, 通常使用 _id 作为片键.

索引的创建

db.collection.createIndex(keys, options)

options(更多选项)列表

注意在 3.0.0 版本前创建索引方法为 db.collection.ensureIndex() , 之后的版本使用了 db.collection.createIndex() 方法, ensureIndex() 还能用, 但只是 createIndex() 的别名.

举个🌰

$  db.comment.createIndex({userid:1})
{
  "createdCollectionAutomatically" : false,
  "numIndexesBefore" : 1,
  "numIndexesAfter" : 2,
  "ok" : 1
}

$ db.comment.createIndex({userid:1,nickname:-1})
...

 索引的删除

# 删除某一个索引
$ db.collection.dropIndex(index)

# 删除全部索引
$ db.collection.dropIndexes()

_id 的字段的索引是无法删除的, 只能删除非 _id 字段的索引

示例

# 删除 comment 集合中 userid 字段上的升序索引
$ db.comment.dropIndex({userid:1})

3.4 索引的使用

执行计划
分析查询性能 (Analyze Query Performance) 通常使用执行计划 (解释计划 - Explain Plan) 来查看查询的情况

$ db.<collection_name>.find( query, options ).explain(options)
比如: 查看根据 user_id 查询数据的情况

未添加索引之前

"stage" : "COLLSCAN", 表示全集合扫描

添加索引之后

"stage" : "IXSCAN", 基于索引的扫描

四.SpringBoot整合MongoDB

1.导入依赖坐标

2.在yml配置MongoDB

3.实体类

@Data//lombok
@Document("comment")//可以省略,如果省略,默认使用类名小写映射集合
public class Comment {
//@Id 该属性的值会自动对应mongodb的主键字段"_id",如果属性名为id可省略private Integer id;
//@Field("content")//该属性对应mongodb字段的名字,如果一致,则无需该注解private String name;private String age;
}

4.数据访问接口

5.测试接口方法(也可以继续写业务逻辑接口,在测试接口方法)

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

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

相关文章

Socket篇(学习前言)

目录 一、计算机网络 二、网络编程 三、网络编程三要素 1. IP地址 1.1. 简介 1.2. IP地址分为两大类 IPv4 IPv6 1.3. IP地址形式 1.4. DOS常用命令 1.5. 特殊IP地址 2. 端口 2.1. 简介 2.2. 端口号 2.3. 端口类型 周知端口 注册端口 动态端口 3. 协议 3.1. …

【专题】基于服务的体系结构

对于面向服务的体系结构&#xff08;Service-Oriented Architecture&#xff0c;SOA&#xff09;的几种定义&#xff1a; W3C&#xff1a;SOA是一种应用程序体系结构&#xff0c;在这种体系结构中&#xff0c;所有功能都定义为独立的服务&#xff0c;这些服务带有定义明确的可…

AMD显卡低负载看视频掉驱动(chrome edge浏览器) 高负载玩游戏却稳定 解决方法——关闭MPO

问题 折磨的开始是天下苦黄狗久矣&#xff0c;为了不再被讨乞丐的显存恶心&#xff0c;一怒之下购入了AMD显卡&#xff08;20GB显存确实爽 头一天就跑了3dmark验机&#xff0c;完美通过&#xff0c;玩游戏也没毛病 但是呢这厮是一点不省心&#xff0c;玩游戏没问题&#xff0c…

小容器拉动大市场 全面云原生化刻不容缓

毋庸置疑&#xff0c;容器技术的发展推动了云原生计算革命。当前&#xff0c;在云原生已经成为企业用云新常态的情况下&#xff0c;作为一项核心能力&#xff0c;容器管理与服务也成了检验云服务商的试金石。Omdia最新发布的《Omdia Universe: Cloud Container Management &…

一招帮你搞懂数据结构的插入、删除

目录 一、尾部插入&#xff08;添加&#xff09; 1.初始化 2.一个打印数组的函数 3.尾插 4.完整版 二、任意位置插入 1.流程图 2.任意插 3.完整版 三、指定数据删除 1.流程图 2. 删除&#xff08;首位查找到的元素&#xff09; 四、删除所有 思想 代码 五、有序…

二叉树相关算法

满二叉树&#xff1a;每层都是满的 完全二叉树&#xff1a;特殊的满二叉树&#xff0c;可以有一个子节点&#xff0c;但最后一层必须是从左到右排列&#xff0c;中间不能有空隙&#xff0c;强调除了最后一层外&#xff0c;其他层都是满的 一、dfs深度搜索 例题&#xff1a;求…

Sigrity Power SI VR noise Metrics check模式如何进行电源噪声耦合分析操作指导

SSigrity Power SI VR noise Metrics check模式如何进行电源噪声耦合分析操作指导 Sigrity Power SI的VR noise Metrics check模式本质上是用来评估和观测器件的电源网络的耦合对于信号的影响,输出S参数以及列出具体的贡献值。 以下图为例

OpenGL入门004——使用EBO绘制矩形

本节将利用EBO来绘制矩形 文章目录 一些概念EBO 实战简介utilswindowFactory.hRectangleModel.hRectangleModel.cpp main.cppCMakeLists.txt最终效果 一些概念 EBO 概述&#xff1a; Element Buffer Object 用于存储顶点的索引数据&#xff0c;以便在绘制图形时可以重用顶点数…

Qt 视口和窗口

Qt 视口和窗口 1、视口和窗口的定义与原理 绘图设备的物理坐标是基本的坐标系&#xff0c;通过 QPainter 的平移、旋转等变换可以得到更容易操作的逻辑坐标。 为了实现更方便的坐标&#xff0c;QPainter 还提供了视口 (Viewport)和窗口 (Window)坐标系&#xff0c;通过Q…

hunyuan-DiT模型部署指南

一、介绍 Hunyuan-DiT是由腾讯混元推出的扩散模型&#xff0c;支持中文和英文双语输入&#xff0c;其他开源模型相比&#xff0c;Hunyuan-DiT 在中文到图像生成方面树立了新的水平。 二、部署流程 环境要求&#xff1a; 所需的最小 GPU 内存为 11GB&#xff0c; 建议使用具…

Pytorch学习--神经网络--搭建小实战(手撕CIFAR 10 model structure)和 Sequential 的使用

一、Sequential 的使用方法 在手撕代码中进一步体现 torch.nn.Sequential 二、手撕 CIFAR 10 model structure 手撕代码&#xff1a; import torch from torch import nn from torch.nn import Conv2d, MaxPool2d, Flatten, Linear from torch.utils.tensorboard import Su…

硬件测试工程师之EMC项目-电磁干扰-谐波测试标准解析思维导图

1&#xff1a;链接上一篇文章 ​​​​​​​相关链接&#xff1a;https://blog.csdn.net/weixin_49492286/article/details/135210741 2&#xff1a;重新总结思维导图并进行深入解析EMC-谐波测试项目 本人重新再次总结这个EMC谐波的标准解析思维导图&#xff0c;并且附上相…

ArcGIS 地理信息系统 任意文件读取漏洞复现

0x01 产品简介 ArcGIS是由美国Esri公司研发的地理信息系统(GIS)软件,它整合了数据库、软件工程、人工智能、网络技术、云计算等主流的IT技术,旨在为用户提供一套完整的、开放的企业级GIS解决方案,它包含了一套带有用户界面组件的Windows桌面应用。可以实现从简单到复杂的…

安全合规:沃尔玛自养号测评技术搭建要点

沃尔玛自养号测评技术的搭建是一个复杂且需综合考量多方面因素的过程&#xff0c;以下是对其技术搭建的详细解析&#xff1a; 一、硬件与网络环境搭建 硬件参数伪装&#xff1a; 利用国外服务器在云端搭建安全终端&#xff0c;全面阻断沃尔玛平台对设备底层硬件参数的检测&a…

Ps:天空替换

Ps菜单&#xff1a;编辑/天空替换 Edit/Sky Replacement Ps菜单&#xff1a;选择/天空 Select/Sky 天空替换 Sky Replacement命令能够自动分析前景与天空&#xff0c;利用 Adobe Sensei 技术也大大减轻了制作蒙版的负担&#xff0c;可以直观、智能、快速地实现天空替换。 到目…

【JavaEE初阶】网络编程TCP协议实现回显服务器以及如何处理多个客户端的响应

前言 &#x1f31f;&#x1f31f;本期讲解关于TCP/UDP协议的原理理解~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么废话不多说…

MySQL 9从入门到性能优化-加密函数

【图书推荐】《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;》-CSDN博客 《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;&#xff08;数据库技术丛书&#xff09;》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…

探索空间计算与 VR 设备的未来:4K4DGen 高分辨率全景 4D 内容生成系统

在当今科技飞速发展的时代,空间计算和 VR 设备正逐渐成为人们体验沉浸式场景的重要工具。而今天,我们要为大家介绍一款具有创新性的技术 ——4K4DGen 高分辨率全景 4D 内容生成系统,它为 VR/AR 沉浸式体验带来了全新的可能性。 一、项目概述 4K4DGen 项目的核心目标是实现 …

Unity中实现伤害飘字或者提示飘字效果(DoTween实现版本)

&#xff01;&#xff01;&#xff01;在实现以下效果之前&#xff0c;一定要往项目中导入DoTween插件。 一、搭建测试场景 1、在场景中新建一个带有Text组件的游戏物体A&#xff0c;并把这个游戏物体A中Text组件的Color属性中alpha值为0&#xff0c;让文字在场景中隐藏。 …

为什么说模拟电路的难点就在开通过程和关断过程?难在什么地方?

模拟电路中开通过程和关断过程之所以困难&#xff0c;主要有以下几个方面的原因&#xff1a; 1. 瞬态响应特性复杂 - 在开通和关断瞬间&#xff0c;电路中的电流和电压会发生快速变化&#xff0c;产生复杂的瞬态响应。这些瞬态响应可能包含过冲、下冲、振铃等现象&#xff0c;…