MongoDB Study Notes

文章目录

  • 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对比有如下关系:

MySQL MongoDB 说明(MySQL/MongoDB)
database database 数据库
table collection 数据库表 / 集合
row document 数据库记录行 / 文档
column field 数据字段 / 域
index index 索引
table jions MongoDB不支持 表连接 / MongoDB不支持
primary key primary key 主键 / MongoDB自动将_id字段设置为主键

1.4 基本操作

1.4.1 查看所有数据库

# 查看所有数据库
show dbs

MongoDB Study Notes_第1张图片

1.4.2 切换数据库

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

MongoDB Study Notes_第2张图片

1.4.3 创建数据库

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

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

1.4.4 删除数据库

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

执行db.dropDatabase()删除此数据库
MongoDB Study Notes_第4张图片

1.4.5 查看数据库中表

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

执行show tablesshow collections查看数据库中表
MongoDB Study Notes_第5张图片

1.4.6 新增数据

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

执行db.user.insert({id:1,username:'zhangsan',age:20})新增数据MongoDB Study Notes_第6张图片

1.4.7 查询数据

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

执行db.user.insert({id:1,username:'zhangsan',age:20})
MongoDB Study Notes_第7张图片

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

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

1.4.8 更新数据

参数 说明
query update查询条件,类似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}})
MongoDB Study Notes_第8张图片
MongoDB Study Notes_第9张图片

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

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

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

MongoDB Study Notes_第10张图片

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

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

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

MongoDB Study Notes_第11张图片

1.4.4 删除数据

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

MongoDB Study Notes_第12张图片

#删除所有数据
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 >:{<:< value >}} db.user.find({“age”:{$lt:23}}).pretty() where age<23
小于或等于 {< key >:{<e:< value >}} db.user.find({“age”:{$lte:23}}).pretty() where age<=23
大于 {< key >:{>:< value >}} db.user.find({“age”:{$gt:23}}).pretty() where age>23
大于或等于 {< key >:{>e:< 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()
MongoDB Study Notes_第13张图片

查询用户年龄大于23:db.user.find({"age":{$gt:23}}).pretty()
MongoDB Study Notes_第14张图片

查询用户年龄大于等于23:db.user.find({"age":{$gte:23}}).pretty()
MongoDB Study Notes_第15张图片

查询用户年龄不等于23:db.user.find({"age":{$ne:23}}).pretty()
MongoDB Study Notes_第16张图片

db.user.find({age:{$lte:23}, id:{$gte:2}}) #and查询,age小于等于21并且id大于等于2
MongoDB Study Notes_第17张图片

db.user.find({$or:[{id:1},{id:2}]})#查询id=1 or id=2
MongoDB Study Notes_第18张图片

分页查询db.user.find().limit(2).skip(1) #跳过1条数据,查询2条数据
MongoDB Study Notes_第19张图片

排序查询:db.user.find().sort({id:-1}) #按照age倒序排序,-1为倒序,1为正序
MongoDB Study Notes_第20张图片

1.5 索引

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

1.5.1 单字段索引

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

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

创建索引:

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

MongoDB Study Notes_第21张图片

查看索引db.user.getIndexes()
MongoDB Study Notes_第22张图片

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

MongoDB Study Notes_第23张图片

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

MongoDB Study Notes_第24张图片

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"})

MongoDB Study Notes_第25张图片

插入数据:

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]
					]
				]
   }
})

MongoDB Study Notes_第26张图片

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

MongoDB Study Notes_第27张图片

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

MongoDB Study Notes_第28张图片

2 Spring Data MongoDB

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

你可能感兴趣的:(MongoDB,mongodb,数据库,nosql)