MongoDB Study Notes

news2024/11/28 14:14:31

文章目录

  • 1 MongoDB快速入门
    • 1.1 什么是MongDB
    • 1.2 部署安装——基于docker
    • 1.3 基本概念
    • 1.4 基本操作
      • 1.4.1 查看所有数据库
      • 1.4.2 切换数据库
      • 1.4.3 创建数据库
      • 1.4.4 删除数据库
      • 1.4.5 查看数据库中表
      • 1.4.6 新增数据
      • 1.4.7 查询数据
      • 1.4.8 更新数据
        • 1.4.8.1 更新不存在字段
        • 1.4.8.2 更新不存在的数据,默认不会新增数据
        • 1.4.8.3 如果设置第一个参数为true,就是新增数据
      • 1.4.4 删除数据
      • 1.4.5 查询数据
    • 1.5 索引
      • 1.5.1 单字段索引
      • 1.5.2 地理空间段索引
      • 1.5.3 地理空间段索引——案例
  • 2 Spring Data MongoDB

1 MongoDB快速入门

1.1 什么是MongDB

① MongoDB是基于分布式文件存储的数据库,由C++编写。
② MongoDB是介于关系数据库与非关系数据库间的产品,是非关系数据库中最类型与关系数据库的,其支持的数据结构十分分散,是类似于JSON的bson,由此可以存储复杂数据类型。
③ MongoDB有单表、多表查询也有索引。

1.2 部署安装——基于docker

docker run -d \
--name mongodb \
-p 27017:27017 \
--restart=always \
-v mongodb:/data/db \
-e MONGO_INITDB_ROOT_USERNAME=sl \
-e MONGO_INITDB_ROOT_PASSWORD=123321 \
mongo:4.4

#进入容器进行设置
docker exec -it mongodb /bin/bash
#进行认证
mongo -u "sl" -p "123321" --authenticationDatabase "admin"

#测试命令,查看已有数据库
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB

1.3 基本概念

将MongoDB与MySQL对比有如下关系:

MySQLMongoDB说明(MySQL/MongoDB)
databasedatabase数据库
tablecollection数据库表 / 集合
rowdocument数据库记录行 / 文档
columnfield数据字段 / 域
indexindex索引
table jionsMongoDB不支持表连接 / MongoDB不支持
primary keyprimary key主键 / MongoDB自动将_id字段设置为主键

1.4 基本操作

1.4.1 查看所有数据库

# 查看所有数据库
show dbs

在这里插入图片描述

1.4.2 切换数据库

# use关键字切换数据库
use testdb

在这里插入图片描述

1.4.3 创建数据库

# 在MongoDB中自动创建数据库,通过use关键字时会自动创建
use testdb2

在这里插入图片描述
说明:执行show dbs会发现无此数据库,其实他已经有了,我们进行插入数据测试
在这里插入图片描述
执行show dbs发现此数据库
在这里插入图片描述

1.4.4 删除数据库

# drop()删除数据库,需要先使用use关键字切换到需要删除的数据库
db.dropDatabase()

执行db.dropDatabase()删除此数据库
在这里插入图片描述

1.4.5 查看数据库中表

# 查看表,需要先使用use关键字切换到表所在数据库数据库
show tables
show collections

执行show tablesshow collections查看数据库中表
在这里插入图片描述

1.4.6 新增数据

# insert()新增数据,需要先使用use关键字切换到需要删除的数据库
db.user.insert({id:1,username:'zhangsan',age:20})

执行db.user.insert({id:1,username:'zhangsan',age:20})新增数据在这里插入图片描述

1.4.7 查询数据

# find()查询数据,需要先使用use关键字切换到需要查询数据的数据库
db.user.find()

执行db.user.insert({id:1,username:'zhangsan',age:20})
在这里插入图片描述

注意主键"_id"
① _id是集合(表)的主键,用于起飞文档记录,_id自动编入索引。
② _id默认类型为ObjectID,是MongoDB的BSON类型之一,允许用户覆盖为ObjectID以外的内容。
③ ObjectID长度为12,由2~4字节的链组成,每个链代表并指定文档身份的具体内容。

  • 一个4字节的值,表示字Unix纪元(一个时间戳)以来的秒数。
  • 一个3字节的机器标识符。
  • 一个2字节的进程ID。
  • 一个3字节的计数器,以随机值开始。

1.4.8 更新数据

参数说明
queryupdate查询条件,类似SQL update语句的where
update类似SQL update查询set后面的
update类似SQL update查询set后面的
upsert若不存在update的记录,是否插入objNew,true为插入,默认是false不插入
multi默认是false,只更新找到的第一条记录,若设置为true,就更新全部查询出来的记录
writeConcern可选,抛出异常的级别
# 更新数据
db.user.update({id:1},{$set:{age:22}}) 

执行db.user.update({id:1},{$set:{age:22}})
在这里插入图片描述

1.4.8.1 更新不存在字段

# 更新数据,若更新不存在的字段,会新增字段
db.user.update({id:2},{$set:{sex:1}}) 

执行db.user.update({id:2},{$set:{sex:1}})
在这里插入图片描述
在这里插入图片描述

1.4.8.2 更新不存在的数据,默认不会新增数据

# 更新不存在的数据,默认不会新增数据
db.user.update({id:7},{$set:{sex:1}})

执行db.user.update({id:7},{$set:{sex:1}})

在这里插入图片描述

1.4.8.3 如果设置第一个参数为true,就是新增数据

# 如果设置第一个参数为true,就是新增数据
db.user.update({id:7},{$set:{sex:1}},true)

执行db.user.update({id:7},{$set:{sex:1}},true)

在这里插入图片描述

1.4.4 删除数据

参数说明
query删除文档的条件
justOne若为 true 或 1,则只删除一个文档,默认值 false,删除所有匹配条件的文档。
writeConcern抛出异常的级别
db.user.remove({age:20}) #删除了2条数据

在这里插入图片描述

#删除所有数据
db.user.remove({})
#说明:为了简化操作,官方推荐使用deleteOne()与deleteMany()进行删除数据操作。
db.user.deleteOne({id:1})
db.user.deleteMany({})  #删除所有数据

1.4.5 查询数据

语法格式:db.user.find([query],[fields])

操作格式示例MySQL类似语句
等于{< key >:< value >}db.user.find({“username”:“zhangsan”}).pretty()where username=‘zhangsan’
小于{< key >:{&lt:< value >}}db.user.find({“age”:{$lt:23}}).pretty()where age<23
小于或等于{< key >:{&lte:< value >}}db.user.find({“age”:{$lte:23}}).pretty()where age<=23
大于{< key >:{&gt:< value >}}db.user.find({“age”:{$gt:23}}).pretty()where age>23
大于或等于{< key >:{&gte:< value >}}db.user.find({“age”:{$gte:23}}).pretty()where age>=23
不等于{< key >:{&ne:< value >}}db.user.find({“age”:{$ne:23}}).pretty()where age!=23

查询用户名为zhangsan:db.user.find({"username":"zhangsan"}).pretty()
在这里插入图片描述

查询用户年龄小于23:db.user.find({"age":{$lt:23}}).pretty()
在这里插入图片描述

查询用户年龄小于等于23:db.user.find({"age":{$lte:23}}).pretty()
在这里插入图片描述

查询用户年龄大于23:db.user.find({"age":{$gt:23}}).pretty()
在这里插入图片描述

查询用户年龄大于等于23:db.user.find({"age":{$gte:23}}).pretty()
在这里插入图片描述

查询用户年龄不等于23:db.user.find({"age":{$ne:23}}).pretty()
在这里插入图片描述

db.user.find({age:{$lte:23}, id:{$gte:2}}) #and查询,age小于等于21并且id大于等于2
在这里插入图片描述

db.user.find({$or:[{id:1},{id:2}]})#查询id=1 or id=2
在这里插入图片描述

分页查询db.user.find().limit(2).skip(1) #跳过1条数据,查询2条数据
在这里插入图片描述

排序查询:db.user.find().sort({id:-1}) #按照age倒序排序,-1为倒序,1为正序
在这里插入图片描述

1.5 索引

MongoDB的索引,可以避免在读取数据室扫描集合中每个文件,直到扫描出符合条件的查询。

1.5.1 单字段索引

支持所有数据类型中的单个字段索引

#单字段索引,1表示升序创建索引,-1表示降序创建索引
db.集合名.createIndex({"字段名":排序方式})

创建索引:

db.user.createIndex({"username":1})`#创建user集合,其中username字段设置索引

在这里插入图片描述

查看索引db.user.getIndexes()
在这里插入图片描述

查看索引大小(单位:字节)db.user.totalIndexSize()

在这里插入图片描述

删除索引db.user.dropIndex(“username_1”)

在这里插入图片描述

1.5.2 地理空间段索引

类型说明
Point(坐标点)coordinates必须是单个位置
MultiPoint(多个点)coordinates必须是位置数组
LineString(线形)coordinates必须是两个或多个位置的数组
MultiLineString(多行线形)coordinates必须是LineString坐标数组的数组
Polygon(多边形)coordinates成员必须是 LinearRing 坐标数组的数组,必须是闭环,也就是第一个和最后一个坐标点要相同。
MultiPolygon(多个多边形)coordinates成员必须是 Polygon 坐标数组的数组。
GeometryCollection(几何集合)geometries是任何一个对象的集合。
#2dsphere索引
db.集合名.createIndex({"字段名":"2dsphere"})
#示例,创建user集合,其中loc字段设置索引
db.user.createIndex({"loc":"2dsphere"})

在这里插入图片描述

插入数据:

db.user.insert({id:3,username:'wangwu',age:21,loc:{type:"Point",coordinates:[116.343847,40.060539]}})
db.user.insert({id:4,username:'zhaoliu',age:23,loc:{type:"Point",coordinates:[121.612112,31.034633]}})
#多边形索引类型示例
#为scpoe集合中的scpoe字段设置球面索引
db.scope.createIndex({"loc":"2dsphere"})

1.5.3 地理空间段索引——案例

#为了便于理解,这里采用x、y坐标系的值来模拟快递员的作业范围
#coordinates格式必须是:[ [ [x,y],[x,y],[x,y] ] ]
db.scope.insert({
   id: 1,
   username: 'shkdy',
   scpoe: {
       type: "Polygon",
       coordinates: [
					[
						[0,0],
						[3,0],
						[3,3],
						[0,3],
						[0,0]
					]
				]
   }
})

在这里插入图片描述

db.scope.insert({
   id: 2,
   username: 'bjkdy',
   scpoe: {
       type: "Polygon",
       coordinates: [
           [
               [- 3, 3],
               [3, 3],
              [3, - 3],
               [- 3, - 3],
              [- 3, 3]
           ]
       ]
   }
})

在这里插入图片描述

下方绿色重复就是一个快递员的作业范围:

在这里插入图片描述

2 Spring Data MongoDB

spring-data对MongoDB做了支持,使用spring-data-mongodb可以简化MongoDB的操作。

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

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

相关文章

Nginx 504 gateway timeout

方案 调整这几个参数来调大nginx的超时时间。 proxy_connect_timeout proxy_send_timeout proxy_read_timeoutnginx 三个代理超时时间配置 proxy_connect_timeout 60s; Defines a timeout for establishing a connection with a proxied server. It should be noted that thi…

【期末划重点】计算机英语(2)(更新中)

阿金的计算机英语&#xff0c;线下考试版~ 时隔半年&#xff0c;又开始赌徒模式啦 这次尝试用大数据文本分析&#xff0c;精准备考 欢迎补充 2023计英期末考赌徒版 Part 1 词汇题&#xff08;20题&#xff0c;40分&#xff09;1、词库说明2、本题答题技巧3、背词方法4、完整词库…

【Python实战】Python采集情感音频

成年人的世界真不容易啊 总是悲伤大于欢喜 爱情因为懵懂而快乐 却走进了复杂和困惑的婚姻 前言 我最近喜欢去听情感类的节目&#xff0c;比如说&#xff0c;婚姻类&#xff0c;我可能老了吧。我就想着怎么把音乐下载下来了&#xff0c;保存到手机上&#xff0c;方便我们业余时…

jdk配置语句以及idea配置问题idea科学使用

一、第一步上链接 官网地址&#xff0c;不过每次都在变版本不过都一样没事&#xff1a; https://www.oracle.com/java/technologies/downloads/ idea2021官网 https://www.jetbrains.com/zh-cn/idea/download/other.html 你可以下载右边付费的版本&#xff0c;如果想下载左边…

IPO观察丨绿源持续推进IPO,这次不止“一部车能骑10年”

近期&#xff0c;国内两轮电动车行业又有新动态。业内老牌企业绿源集团更新招股书&#xff0c;继续推进上市进程&#xff0c;中信建投国际担任保荐人。 其实去年11月&#xff0c;绿源已向港交所递交招股书&#xff0c;只不过受若干原因影响&#xff0c;在今年5月失效。当然&am…

synchronized简单理解

一、简述 1.1 synchronized介绍 synchronized是一种互斥锁&#xff0c;也成为同步锁&#xff0c;它的作用是保证在同一时刻&#xff0c;被修饰的代码块或方法只会有一个线程执行&#xff0c;以到达保证并发安全效果。在JDK1.6以前&#xff0c;很多人称之为重量级锁&#xff0…

作为一名仓库管理人员,如何有效地管理仓库?

作为一名仓库管理人员&#xff0c;如何有效地管理仓库&#xff1f; 有效仓库管理主要可以分为四个方面&#xff1a; 出入库 库存调拨 库存盘点 虚拟库存/实际库存管理 当然仓库管理最基本的硬件条件还是需要准备好的&#xff0c;比如将仓库分一下区域&#xff0c;以便之后商…

layui(3)——内置模块弹出层

弹出层 1.基础参数 使用模块layer layui.use(layer, function(){var layer layui.layer;}); <script>layui.use(layer, function () {var layer layui.layer;layer.open({// layer提供了5种层类型。可传入的值有&#xff1a;0&#xff08;信息框&…

极简操作!跟着官方教程,下载并使用汉化版Figma!

随着云端协作设计工具的发展&#xff0c;Figma 作为一款基于云端的国外云端协作工具&#xff0c;尽管无需下载即可在线使用&#xff0c;但在国内却常常遇到加载缓慢、需要刷新重进的问题。此外&#xff0c;Figma 在实际使用过程中&#xff0c;常常需要搭配其他软件或第三方插件…

vue3+element plus,使用分页total修改成中文

vue3element plus&#xff0c;使用分页total修改成中文 使用element plus的分页功能 el-pagination 的时候&#xff0c;total属性显示是英文 这是我建的一个新项目&#xff0c;总数显示的Total 1000 我们的需求是显示中文&#xff0c;共 1000 条 这个就很尴尬&#xff0c;组件…

JAVA基础,区别于C++

JAVA 基础 1. 数据类型 字节型 byte 1 字节 -128~127 短整型 short 2 字节 -32768~32767 整型 int 4 字节 -2147483648~2147483647 长整型 long 8 字节 -9223372036854775808L~92…

初学Nginx要掌握哪些概念?

文章目录 为什么要使用Nginx&#xff1f;什么是Nginx&#xff1f;Nginx的作用&#xff1f;反向代理负载均衡动静分离 为什么要使用Nginx&#xff1f; 小公司项目刚刚上线的时候&#xff0c;并发量小&#xff0c;用户使用的少&#xff0c;所以在低并发的情况下&#xff0c;一个…

iNotes(WebMail)中的附件显示

大家好&#xff0c;才是真的好。 1995年Domino R4/4.5中加入了HTTP功能&#xff0c;从此便支持从用户从Web浏览器上查看邮件.一开始称之为Domino Web Access&#xff0c;后来更名为IBM Lotus iNotes&#xff0c;简称iNotes&#xff0c; 对于不熟悉Notes/Domino的人来说&#…

达梦数据库dblink测试(DM-ORACLE19c及DM8-DM8)

目录 DM与DM创建DBLINK. 3 一、配置203服务器... 3 1、主服务器203开启mal服务... 3 2、主服务器203配置dmmal.ini文件... 3 3、重启203数据库... 4 二、配置200服务器... 4 三、创建dblink. 4 DM与Oracle数据库创建dblink. 5 一、DM服务器&#xff1a;... 6 1、初始…

祝愿莘莘学子高考顺利!Good luck on your Gaokao!

《登科后》 唐孟郊 昔日龌龊不足夸&#xff0c;今朝放荡思无涯。 春风得意马蹄疾&#xff0c;一日看尽长安花。 Gone are all my past woes! What more have I to say? My body and my mind enjoy their fill today. Successful, faster runs my horse in vernal breeze;…

ArrayList 的底层原理和源码分析

tip&#xff1a;作为程序员一定学习编程之道&#xff0c;一定要对代码的编写有追求&#xff0c;不能实现就完事了。我们应该让自己写的代码更加优雅&#xff0c;即使这会费时费力。 推荐&#xff1a;体系化学习Java&#xff08;Java面试专题&#xff09; 文章目录 一、简介二、…

Cookie Session

第一章 会话技术 1.1 什么是会话 web会话可简单理解为&#xff1a;用户开一个浏览器&#xff0c;访问某一个web网站&#xff0c;在这个网站点击多个超链接&#xff0c;访问服务器多个web资源&#xff0c;然后关闭浏览器&#xff0c;整个过程称之为一个会话. 它是指浏览器和服…

URL到页面: 探索网页加载的神秘过程

当我们从浏览器的地址栏输入 URL, 按下回车, 再到最后出现需要的网页界面, 这中间究竟发生了什么, 接下来就一步步进行解析. 主要是如下过程: 输入网址DNS 解析客户端发送 HTPP 请求建立 TCP 连接服务器处理请求, 计算响应, 返回响应浏览器渲染页面关闭连接 本篇中只是概述整…

AUTOSAR-OS的调度机制-调度表(没理解透,继续更新)

什么是调度表&#xff1a; 1. 调度表由一系列按时间先后顺序排序的终结点组成&#xff0c;其中每个终结点都有自己的任务&#xff0c;有的终结点可能是激活一系列的任务&#xff0c;有的是设置一系列的事件&#xff0c;还有的可能是既激活一系列的任务又设置一系列的事件。 调…

数据结构之庖丁解牛八大排序算法,附动图说明过程(上)

目录 一、排序的概念以及应用 二、常见排序算法的实现 1.插入排序 1.1直接插入排序 b.实现直接插入排序 1.2希尔排序&#xff08;缩小增量排序&#xff09; 2.选择排序 2.1直接选择排序 2.2堆排序 3.交换排序 3.1冒泡排序 一、排序的概念以及应用 1.排序的概念 所谓排序&#x…