MongoDB菜鸟入门:docker搭建单机MongoDB

2023年 7月 10日 38.4k 0

数据库受欢迎程度排行榜中,MongoDB一直居于前五。对于没有了解过MongoDB的朋友可能觉得MySQL就能满足日常业务,如果不行,还可以使用缓存、es等。但是MongoDB也有自己的独到之处,而且越来越多的公司与业务都在使用MongoDB。

MongoDB简介

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。

Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

MongoDB优势

  • json数据结构,可以节省数据库结构的设计和ORM层编码的开发。
  • 可以更加专注于业务编程,花更少的时间在数据库设计方面。
  • 灵活的数据结构,可以快速响应业务需求的变化
  • 从4.0开始,MongoDB已经支持事务

对比关系型数据库

标题 MongoDB RDBMS
数据模型 文档模型 关系模型
高可用 复制集 集群模式
横向扩展能力 通过原生分片完善支持 数据分区或者应用侵入
索引支持 B+树,全文索引,地理位置索引,多键索引,TTL索引 B+树
数据容量 没有理论上线 千万,亿
扩展方式 垂直扩展+水平扩展 垂直扩展

MongoDB数据模型

MongoDB最小存储单位就是文档(document)对象。类似于关系型数据库的行。数据在MongoDB中以BSON(Binary-json)文档的格式存储在磁盘上。

BSON是一种类json的二进制形式的存储格式。支持内嵌的文档对象和数组对象。具有轻量型、可遍历性、高效性三个特点,可以有效描述非结构化数据和结构化数据。这种格式优点是灵活性高,缺点是空间利用率不是很理想。

BSON格式缺点

正所谓成也萧何败也萧何。上面说到BSON格式优点是灵活性高,缺点是空间利用率不是很理想。

空间利用率可以忽略,多费点硬盘空间而已。

灵活性高,可以使业务变更更容易,但是也注定了对数据结构的约束很难。

docker搭建单机MongoDB

shell复制代码

#安装MongoDB容器

#-e MONGO_INITDB_ROOT_USERNAME创建管理员账号

#-e MONGO_INITDB_ROOT_PASSWORD=123456创建密码

docker run -d -p 27017:27017 --name mongodb -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=123456 mongo:5.0.9

#进入容器

docker exec -it mongodb /bin/bash

#登录mongo,登录的数据库是admin数据库

mongo localhost:27017 -u 'admin' -p '123456' --authenticationDatabase 'admin'

#创建数据库shop

use shop

#创建用户

#账号:root

#密码:123456

#角色:root

#管理数据库:admin

db.createUser({ user: 'sh', pwd: '123456', roles: [ { role: "dbOwner", db: "shop" } ] });

#插入数据
> db.shop.insert({name:123})
WriteResult({ "nInserted" : 1 })

MongoDB语法

新增

db.shop.insert({name:123})

查询

MySQL MongoDB
a=1 {a:1}
a1 {a:{$ne:1}}
a>1 {a:{$gt:1}}
a>=1 {a:{$gte:1}}
a db.shop.remove({})
WriteResult({ "nRemoved" : 1 })
>
> db.shop.insert({id:1,amount:100,status:1})
WriteResult({ "nInserted" : 1 })
> db.shop.insert({id:2,amount:200,status:1})
WriteResult({ "nInserted" : 1 })
> db.shop.insert({id:3,amount:300,status:1})
WriteResult({ "nInserted" : 1 })
> db.shop.insert({id:4,amount:400,status:2})
WriteResult({ "nInserted" : 1 })
> db.shop.count()
4
> db.shop.aggregate([{$match:{status:1}},{$group:{_id:"$id",total:{$sum:"$amount"}}}])
{ "_id" : 3, "total" : 300 }
{ "_id" : 1, "total" : 100 }
{ "_id" : 2, "total" : 200 }
>

常见步骤

功能 MQL SQL
过滤 $match where
投影 $project as
排序 $sort order by
分组 $group group by
结果大小 $skip$limit limit
左外连接 $lookup left join
展开数组 $unwind
图搜索 $graphLookup
分面搜索 $facet$bucket

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论