MongoDB Study Notes

news/2024/9/16 19:03:07/

文章目录

  • 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.ppmy.cn/news/262957.html

相关文章

win10的另一种美化字体的方式,使用noMeiryoUI

目录 1. 前提2. 字体选择3. 查看已经安装的字体并查看效果4. 安装软件修改系统字体5. 修改浏览器字体 1. 前提 21年的时候写了一篇文章&#xff0c;《Windows10下美化字体&#xff0c;达到类似mac的效果》&#xff0c;当时还很迷恋macType这个软件的使用&#xff0c;觉得好牛逼…

x265的DCT

文章目录 DCT相关背景知识DCT变换系数矩阵32x32变换矩阵系数其他尺寸变换矩阵系数 变换计算过程流程图 代码实现数据残差变换系数对应残差 我的简单实现实现细节实现代码 x265对应代码实现openHEVC代码实现 DCT相关背景知识 DCT变换系数矩阵 标准提供了32x32的系数矩阵&#…

环保数采仪环境污染在线监控设备 上传监控平台

1. 概述 AF-HK100 环保数采仪是应环保领域各级国控、省控及市控污染源环境在线监控&#xff08;监测&#xff09;系统的需求而开发研制的产品&#xff0c;通过模拟通道、开关通道、数字通道&#xff08;RS232/485/LoRa&#xff09;与前端各类监测仪器/仪表实现无缝连接&#xf…

网络设备监控

原文网址:http://knowhow.innovatedigital.com/network-device-monitoring.html 网络设备包括交换机&#xff0c;路由器和防火墙是任何IT环境的重要组成部分。HQ深覆盖面的操作系统和支持SNMP为基础的应用管理&#xff0c;可以监控代理管理的网络设备&#xff0c;如思科系统&a…

室内监控摄像机能做什么?安装在室内有哪些好处?

室内监控摄像机能做什么&#xff1f;安装在室内&#xff0c;主要是用于办公室&#xff0c;家庭&#xff0c;商铺&#xff0c;工厂以及仓库等。监控什么&#xff1f;监控小孩老人的动态&#xff0c;查看保姆的做事态度&#xff0c;查看家里宠物的生活习性。喜欢在凉台养植物的&a…

云呐|机房监控服务平台,机房监控服务平台有哪些

机房动环监控平台提供平台、万级站点连接能力、电源、电池、油机、空调、烟雾、浸水、门禁、温湿度、视频等智能终端统一连接&#xff0c;提供集中运维监控能力。根据大规模运维管理&#xff0c;积累大量运维数据&#xff0c;降低运维费用&#xff0c;提高运维水平。动环采集一…

安防视频监控直播的画面都是如何采集的?

我们公司这几天在做摄像头对接流媒体服务器推流的测试&#xff0c;突然想起来我好像还没有就直播画面的采集写过什么&#xff0c;所以今天我就来讲一下采集。采集是整个视频推流过程中的第一个环节&#xff0c;它从系统的采集设备中获取原始视频数据&#xff0c;将其输出到下一…

安防监控如何存储?

安防监控是有多个部位组成&#xff0c;比如是需要摄像机、录像机、显示器、交换机等工具。接受录像以后再上传到安防监控系统&#xff0c;并从摄像到图像显示和记录构成独立完整的系统。每年无论是大型的机房监控还是安防监控的视频存储是一大问题。 面对云视频存储的性能、安全…

机械设备远程实时监控方案

摘要&#xff1a;伴随着我国市场经济的不断发展&#xff0c;目前机械设备的使用范围越来越广泛。但是&#xff0c;由于机械设备使用时不容易管理&#xff0c;并且比较分散&#xff0c;同时也存在长期使用的一些机械设备逐渐老化以及操作工在使用机械设备时操作不当而引起设备的…

家用小型监控器安装位置与功能

家用小型监控器安装的位置可选性很多&#xff0c;比如壁橱&#xff0c;酒柜&#xff0c;书架等&#xff0c;这些易于隐藏又不会被注意的角落正是家用小型监控器发挥作用的位置。为什么家用摄像机的体积越来越小&#xff0c;而且功能却越来越强大呢。从速名网的数据可以看出&…

监控产品

海康解码器 主动解码 又称动态解码&#xff0c;由解码器主动连接编码器请求数据流&#xff0c;常见应用&#xff1a;解码上墙&#xff0c;远程录像回放上墙&#xff0c;轮巡解码。 被动解码 解码器不会发起请求,其他设备向解码器上传数据&#xff0c;解码器只有接到数据…

数据监控平台

数据监控平台 监控平台需要实时监控业务指标数据&#xff0c;系统特点&#xff1a;高并发&#xff0c;大数据&#xff0c;低延迟。主要使用的技术&#xff1a; HBase存储海量数据&#xff0c;ScriptEngine引擎&#xff0c;MySQL分表&#xff0c;Redis集群。 高并发&#xf…

监控器材产品如何做好软文?

软文是一种有效的市场宣传手段&#xff0c;是宣传形式之一&#xff0c;是一种以自然、温和的方式来宣传商品、服务的手段。在当前市场竞争激烈的情况下&#xff0c;软文的重要性越来越凸显&#xff0c;是监控器材产品引流宣传的有效手段。可以有效地扩大产品影响力&#xff0c;…

监控平台(二)

Cacti Cacti 在英文中的意思是仙人掌的意思&#xff0c;Cacti 是一套基于 PHP、MySQL、SNMP 及 RRDTool 开发的网络流量监测图形分析工具。它通过 snmpget 来获取数据&#xff0c;使用 RRDtool 绘画图形&#xff0c;而且你完全可以不需要了解 RRDtool 复杂的参数。它提供了非常…

驱动操作控制LED灯

控制LED灯&#xff1a; 驱动如何操作寄存器 rgb_led灯的寄存器是物理地址&#xff0c;在linux内核启动之后&#xff0c; 在使用地址的时候&#xff0c;操作的全是虚拟地址。需要将物理地址 转化为虚拟地址。在驱动代码中操作的虚拟地址就相当于 操作实际的物理地址。 物理地址&…

Mac使用DBeaver连接达梦数据库

Mac使用DBeaver连接达梦数据库 下载达梦驱动包 达梦数据库 在下载页面随便选择一个系统并下载下来。 下载下来的是zip的压缩包解压出来就是一个ISO文件&#xff0c;然后我们打开ISO文件进入目录&#xff1a;/dameng/source/drivers/jdbc 进入目录后找到这几个驱动包&#x…

超市冷柜中板栗冷藏保鲜特性

超市冷柜中板栗冷藏保鲜特性&#xff1a;首先板栗是呼吸跃变型果实&#xff0c;板栗采后水分含量高&#xff0c;呼吸作用十分旺盛&#xff0c;存放不当易发生腐烂、失水、发芽及虫害等。其次板栗采后怕热、怕于、怕湿、怕冻&#xff0c;要注意保证贮运条件适当&#xff0c;否则…

2021-2027全球与中国立式双门冷柜市场现状及未来发展趋势

本报告研究全球与中国市场立式双门冷柜的产能、产量、销量、销售额、价格及未来趋势。重点分析全球与中国市场的主要厂商产品特点、产品规格、价格、销量、销售收入及全球和中国市场主要生产商的市场份额。历史数据为2016至2020年&#xff0c;预测数据为2021至2027年。 主要生产…

深化管理、提升IT的数据平台建设方案

谈到信息化&#xff0c;每个企业有每个企业的业务模式&#xff0c;每个企业有每个企业不同的思考。落地有效的信息化建设一定紧跟着企业的发展&#xff0c;围绕业务和管理&#xff0c;来提升效率&#xff0c;创造价值。 对于企业如何在发展的不同阶段提升信息化建设&#xff0…

世界第一家完成两百万次AI验箱自动箱况检测,上亿次集装箱识别,产品运行时长超660万小时,全球No.1集装箱人工智能企业中集飞瞳

世界第一家完成两百万次AI验箱自动箱况检测&#xff0c;上亿次集装箱识别&#xff0c;产品累计运行时长超660万小时&#xff0c;全球No.1集装箱人工智能AI企业中集飞瞳。中集飞瞳全球港航人工智能独角兽&#xff0c;成熟港航人工智能AI产品行业第一&#xff0c;人工智能产品与人…