MongoDB快速入门小杂记
本文最后更新于 451 天前,其中的信息可能已经有所发展或是发生改变。

MongoDB快速入门小杂记

前因

起因是一台MongoDB虚拟机磁盘95%了,联系系统技术负责人安排删除数据,因数据为生产数据,如果运维的我私下删除会坐牢,我也不想走OA,于是直接反馈到技术负责人和我们这边的DB管理员。可能都不想闯这浑水也顺便给讽刺了一波,那我就顺便再复习一下吧。就当这个笔记做个起因我去复习了。

image-20231128093732008

mongodb是什么

MongoDB是一个NoSQL的非关系型数据库 ,支持海量数据存储,高性能的读写。

基本概念

数据库(Database)

是集合的容器,相当于关系型DB(SQL)中的数据库。

集合(Collection)

数据库中的⼀组⽂档,相当于SQL中的表。

⽂档(Document)

集合中的⼀条记录,相当于SQL的表中的⼀⾏。不同的⽂档之间不必有相同的结构,这⼀点是和SQL不同的。

字段(Field)

⽂档中的键值对,相当于SQL中的列。⽐较重要的区别是MongoDB中的⼀个field可以是⼀个JSON对象或者数组。

mongo的体系结构

SQL术语/概念 MongoDB术语/概念 解释/说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins 表连接,MongoDB不支持
primary key primary key 主键,MongoDB自动将_id字段设置为主键

mongoDB存储原理

image-20231128094047620

  1. mongoDb采用内存加磁盘的方式存储数据
  2. mongoDb支持数据分片,当单一的服务器中磁盘不够用的时候,还可以串联其他服务器;
  3. 客户端的请求到达内存时,先在日志中记录下操作记录,然后再去操作内存;
  4. 内存中的日志每10ms向磁盘中的日志进行同步一次,数据则每分钟同步一次;
  5. 客户端先去内存中查询数据,内存中没有再去查询磁盘;
  6. 当客户端写入的时候,会先写入到内存中,内存中写入后请求直接返回,内存中的数据会根据同步策略同步到磁盘;
  7. 如果机器宕机,在重启服务的时候会解析磁盘中的日志和磁盘中的数据进行对比,将未入到磁盘中的数据写入磁盘,但可能会丢失10ms的数据;

使用docker快速部署mongo

安装

拉取mongo镜像:

docker pull mongo:4.4

创建mongo数据持久化目录

mkdir -p /data/docker/mongodb/data

运行容器

docker run -itd --name mongo -v /data/docker/mongodb/data:/data/db -p 27017:27017 mongo:4.4 --auth

–auth:需要密码才能访问容器服务

创建用户

以 admin用户身份进入mongo

docker exec -it mongodb mongo admin

创建一个用户,mongo 默认没有用户

db.createUser({ user:'root',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},'readWriteAnyDatabase']});

db.auth('root','123456') # 尝试使用上面创建的用户信息进行连接。

exit # 创建成功后可退出

简单测试

[root@localhost ~]# docker exec -it mongo /bin/bash
root@f6be943a9361:/#
root@f6be943a9361:/# mongo admin -u root -p
MongoDB shell version v4.4.25
Enter password:
connecting to: mongodb://127.0.0.1:27017/admin?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("60c3d561-71ce-442c-83e5-5b4b22550789") }
MongoDB server version: 4.4.25
>
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
test    0.000GB
>

使用mongodb

常用命令

#查看已经存在的数据库
show dbs;
#创建数据库
use 数据库名
#删除数据库
db.dropDatabase()
#查看集合
show collections;
#创建集合
db.createCollection("news")
#删除集合
db.runoob.drop()
#添加数据
db.集合名.insert({'id':1,'title':'12'})
#查询所有
db.集合名.find()
#删除数据
db.集合名.remove({"id":1})
#条件查询
db.集合名.find({"id":1})

基本命令

# 打开⼀个连接到本地实例的MongoShell 所有其他命令都需要再mongosh中执⾏。
mongosh
# 显示当前MongoDB实例中的所有数据库。
show databases
show dbs
# 显示当前使⽤中的数据库名称。
db
# 清屏。
cls
# 显示当前数据库中的所有集合
show collections
# 删除当前的数据库。
db.dropDatabase()
# 退出mongosh会话。
exit

创建/插⼊

insertOne # 在集合中插⼊⼀个新的⽂档。如:db.users.insertOne({name: "glj"})

insertMany # 集合中插⼊多个新的⽂档。db.users.insertMany([{name: "李四"}, {name: "王五"}])

查找

# 查询所有的⽂档。
find 
#如:db.users.find()

# 查询所有满⾜参数对象<filterObject>中指定过滤条件的数据
find(<filterObject>) 
#如:db.users.find({name: "glj"})

# 查询所有满⾜参数对象<filterObject>中指定过滤条件的数据,并且只返回<selectObject>中指定的字段。
db.find(<filterObject>,<selectObject>)
#如 db.users.find({name: "glj"}, {name: 1, email: 1})

# 与find⽤法相同,找到满⾜过滤条件的对象,但是只返回第⼀条。
findOne
# 如: db.users.findOne({level: 1})

sort # 使⽤给定的字段按照升序或者降序来排序。

limit #限定只返回给定数量的⽂档。

skip #从头开始跳过给定数值的⽂档。

更新

# 更新满⾜条件的第⼀个⽂档。
updateOne

# 更新满⾜条件的所有⽂档。
updateMany

# 替换满⾜条件的第⼀个⽂档。
replaceOne

# 通过传⼊的⽂档替换已有⽂档或插⼊⼀个新的⽂档。
save

# 只更新⽂档中$set指定的字段,不会影响其他字段。
$set

# ⽤于递增(或递减)⽂档中指定字段值的操作符。
$inc

# 更新某个字段的名称。
$rename

# 删除⼀个字段。
$unset 

# 将值加⼊⼀个数组中,不会判断是否有重复的值。
$push

#将值从⼀个数组中移除。
$pull

# 将值加⼊⼀个数组中,会判断是否有重复的值,若重复则不加⼊。
$addToSet

删除

# 删除满⾜条件的第⼀个⽂档。
deleteOne

#删除满⾜条件的所有⽂档。
deleteMany

聚合

聚合主要⽤于处理数据,并返回计算后的结果,⽐如求和、平均值等。

$sum #计算总和。

$avg # 计算平均值。

$min #获取最⼩值。

$max #获取最⼤值。

$push #将值加⼊⼀个数组中,不会判断是否有重复的值。

$first #获取第⼀个⽂档数据。

$last #获取最后⼀个⽂档数据。

参考

快速引起记忆视频:https://www.bilibili.com/video/BV16u4y1y7Fm

文章:https://blog.csdn.net/ManGooo0/article/details/123803323

评论

  1. Macintosh Edge 119.0.0.0
    1 年前
    2023-11-28 23:39:29

    我记得你之前做Java来着,转运维了吗

    • 博主
      Tokin
      Windows Edge 118.0.2088.76
      1 年前
      2023-12-01 13:45:16

      技术太拉了

    • Tokin
      Macintosh Chrome 119.0.0.0
      1 年前
      2023-12-07 16:58:41

      他的java水平已经到了天花板了,挑战运维了.

  2. Macintosh Chrome 119.0.0.0
    1 年前
    2023-11-29 23:15:08

    太专业了

    • 博主
      关关
      Windows Edge 118.0.2088.76
      1 年前
      2023-11-30 8:39:21

      gpt写的,哈哈哈哈

  3. Macintosh Chrome 119.0.0.0
    1 年前
    2023-12-07 16:58:16

    学他老母,工资不见分你一半.

    • 博主
      大雄
      Windows Edge 118.0.2088.76
      1 年前
      2023-12-07 22:25:30

      到时候运维这样和你说你会不会打他

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇