前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Not Only SQL (三) - MongoDB Introduce & CRUD (上)

Not Only SQL (三) - MongoDB Introduce & CRUD (上)

作者头像
RiemannHypothesis
发布2022-08-19 16:48:06
9070
发布2022-08-19 16:48:06
举报
文章被收录于专栏:Elixir

一、MongoDB Introduce

mongoDB是业界最受欢迎的非关系型数据库解决方案之一,是众多公司和开源项目的首要选择;这主要归功于mongoDB的下面这些优点

  • 灵活性
  • 可扩展性
  • 强大的查询语言
  • 优异的性能MongoDB是什么 首先MongoDB不是传统的关系型数据库,关系型数据库将数据存放在表格中,通过外键建立两张表或者多张表之间的联系,而mongoDB不存储表格,MongoDB是存储文档的非关系型数据库

除了MongoDB还有哪些非关系型数据库?

image.png
image.png

MongoDB数据库的结构

image.png
image.png

MongoDB文档支持的格式是JSON的扩展格式,也称之为BSON。同一个集合中的文档可以拥有完全不同的字段,例如描述客户信息的文档和描述账户信息的文档放在一个集合里,这种灵活性也是非关系型数据库的优势

创建并启动MongoDB服务

使用Docker创建并运行MongoDB

代码语言:javascript
复制
docker pull mongo:4
docker images
# 运行一个mongoDB容器,-v表示挂载数据的目录,-d表示后台运行
docker run --name mongoDB -v /mongoDB/data:/data/db -d mongo:4
docker ps
# 查看mongoDB运行日志
docker logs mongoDB

Mongo Express是一个基于网络的MongoDB数据库管理界面

代码语言:javascript
复制
docker pull mongo-express
# 运行mongo-express
docker run --link mongoDB:mongo -p 8081:8081 mongo-express
docker ps

浏览器输入ip:8081,就可以进行Mongo DB的管理界面

image.png
image.png

点击进入local数据库

image.png
image.png

点击_id可以查看一条文档记录

image.png
image.png

mongo shell是用来操作MongoDB的javascript客户端界面

代码语言:javascript
复制
# 容器中执行mongo命令进入mongo shell, 第二个mongo是进入mongo shell的命令
docker exec -it mongo mongo

mongo shell界面如下所示

image.png
image.png

支持javascript命令,退出使用exit命令就可以退出mongo shell

二、基本操作

  • Create 创建
  • Read 读取
  • Update 更新
  • Delete 删除

每篇文档都拥有一个专属_id字段即文档主键,具有唯一性,文档主键支持除数组外的所有数据类型

对象主键是MongoDB默认自动生成的文档逐渐,大小为12个字节并且包含了创建的时间,最好使用mongoDB默认生成的对象主键作为文档主键,这样可以避免主键冲突的情况

创建文档

  • db.<collection>.insertOne()
  • db.<collection>.insertMany()
  • db.<collection>.insert()
  • db.<collection>.save()
代码语言:javascript
复制
# 使用test数据库
use test
# 查看数据库中所有的集合
show collections

db.<collection>.insertOne()创建第一个文档

代码语言:javascript
复制
db.<collection>.insertOne(
    <document>,
    {
        wirteConcern:<document>
    }
)
  • collection:文档将要写入的集合的名称
  • document:文档本身
  • writeConcern:定义了本次文档创建操作的安全写级别,安全写级别用来判断一次数据库写入操作是否成功,安全级别越高,丢失数据的风险越低,写入操作的延迟也越高,如果不提供writeConcern,MongoDB将使用默认的安全写级别

在命令行中执行文档写入操作

image.png
image.png

db.<collection>.insertOne()返回的也是一个BSON格式的数据

acknowledged:true表示安全写级别被启用,这里使用的是默认的安全写级别

insertedId:被写入的文档的_id

该命令会自动创建响应的集合

再一次往accounts集合中插入数据

image.png
image.png

使用try-catch可以处理插入文档时出现的异常

image.png
image.png

WriteError即输出的异常信息的文档,可以看出是由于主键冲突造成的异常。

插入数据时指定主键难免会出现主键冲突的情况,可以使用MongoDB的自动生成文档主键的功能,插入文档时不指定主键_id,MongoDB会使用默认生成主键的功能生成主键并返回

image.png
image.png

db.<collection>.insertMany()创建多个文档

代码语言:javascript
复制
db.<collection>.insertMany(
    # 将多个文档作为数组,使用[]传入
    [<document1>,<document2>,<document3>....]
    {
        wirteConcern: <document>,
        ordered: <boolean>
    }
)
  • ordered:决定MongoDB是否按照顺序写入数组中的文档,默认为true。如果设置为false,MongoDB会打乱写入顺序,以便优化操作性能
image.png
image.png

db.<collection>.insertMany()返回的insertedIds是一个数组包含了插入文档的主键_id

顺序插入文档时遇到错误

image.png
image.png

使用find()命令查看集合中所有的文档,文档全部插入失败

image.png
image.png

在顺序写入时,一旦遇到错误,便会退出操作,剩下的文档无论是否正确都不会被写入数据库中

乱序插入文档时遇到错误

image.png
image.png

在乱序写入时,即使某些文档写入出现异常,剩余正确的文档仍然会被写入数据库 查看数据库中的数据

image.png
image.png

乱序写入出现异常时,name为strange1的文档仍然被写入数据库

db.<collection>.insert()创建一个或多个文档

代码语言:javascript
复制
db.<collection>.insert(
    # 将多个文档作为数组,使用[]传入
    <document> or [<document1>,<document2>,<document3>....]
    {
        wirteConcern: <document>,
        ordered: <boolean>
    }
)

使用db.<collection>.insert()命令插入一个或者多个文档

image.png
image.png

db.<collection>.insert()出现异常时同样可以使用try-catch输出异常信息

插入文档总结

三个命令的不同点

  • insertOne、insertMany和insert插入成功的返回和异常返回的格式不同
  • insertOne和insertMany命令不支持db.<collection>.explain()命令,insert()支持

db.<collection>.save()命令也可以创建一个或者多个文档,它是调用db.<collection>.insert()来完成创建的

默认的文档主键是ObjectId,里面包含了创建时间,可以通过调用getTimestamp()方法获取

image.png
image.png

当主键也是一个文档时,该主键称为复合主键。复合主键仍然要满足文档主键的唯一性。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-02-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、MongoDB Introduce
    • 创建并启动MongoDB服务
    • 二、基本操作
      • 创建文档
      相关产品与服务
      云数据库 MongoDB
      腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档