Mongodb基础用法【总结】

关系型数据库和非关系型数据库的区别

关系型数据库

1.在关系型数据库中,数据都是存储在表中的,对存储的内容有严格的要求

2.因为我们在创建表的时候久已经规定了表中的字段 存储的数据类型 是否为空 唯一标识等规则

3.由于操作的都是结构化的数据,所以我们需要使用结构化语言sql来操作
非关系型数据库

1.没有表概念 所以存储数据更加灵活 不规定字段 数据类型 是否为空 唯一标识等

2.由于数据没有严格要求,所以无需食用sql来操作

在mongodb中我们存储的数据是一个类似于json的格式叫BSON 例如 {name:wyf,age:18,sex:1}

高并发 高性能 高可用

拓展性强 不需要指定列

mongodb的缺点 对事务的支持不是很友好

mongodb中记录的就是一个文档 一个数据库中有多个集合 每个集合包含多个文档 域(就是字段) Mongodb通过嵌入式文档来代替多表联查

mongodb的基础常用命令

show dbs查询所有库 mongodb存储分为两部分 上面是内存 下面是磁盘 当我们用use 创建库的时候 我们的库现在在内存中 没有持久化到磁盘 当我们新建的库有一个文档数据的时候 就会自动存如磁盘中

mongodb默认的3个库

1.admin 就是用来存储用户信息的库

2.local这个库的数据永远不会被复制,可以用来存储先于本地单台服务器的任意集合

3.config 当mongodb用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。

创建数据库

use 数据库名称 如果use没有这个数据库就会创建一个 如果有那就切换到这个数据库

文档类似于mysql的一行数据

集合类似于mysql的table

数据库的删除

db.dropDatabase()

创建集合(集合就相当于mysql中的表)
显示创建

db.createCollection("集合名称") 不管里面是否有文档 先把这个集合创建出来
隐式创建

插入文档的时候 集合如果不存在 则创建集合

删除集合

db.集合名称.drop() 返回true就代表删除成功

插入文档

单条

db.集合名称.insert({})

多条

db.集合名称.insertMany({})

如果没有这个集合名称 就会被隐式创建

如果某一条数据插入失败就比较麻烦 我们想要找到具体的报错可以使用 try catch机制

1.try 将可能抛出异常的代码放在try中

2.catch 如果try块中的代码抛出异常,catch块将捕获这个异常,并允许定义错误处理逻辑

查询所有

db.集合名称.find()

查询指定的数据

db.集合名称.find({"":""})

查询第一条数据

db.集合名称.findOne({"":""})

投影查询 (只想显示部分的字段)

db.集合名称.find({"id":"1"},{"id":"1"})

这样就只会显示我们的id字段

文档更新

覆盖修改

db.集合名称.update({_id:"1"},{"要修改的字段":"修改内容"})

如何这种方法 会把之前的文档数据全部修改

局部修改

db.集合名称.update({_id:"2"},{$set:{"修改字段":"修改内存"}})

这种方法更改指定字段并保留其他数据

批量修改

db.集合名称.update({_id:"2"},{$set:{"修改字段":"修改内存"}},{multi:true})就是批量修改符合类型的文档

最新的mongodb中支持updateMany的函数可以直接修改批量数据

列值增长修改

db.集合名称.update({_id:""},{$inc:{要增长的字段:1}})

代表这个字段每次增长1 _id后面的值是字符串 例如 【增长字段开始为666】增长完就是667

删除文档

db.集合名称.remove({"要删除的文档字段":"条件"})

全部删除

db.集合名称.remove({不加条件})

分页查询

1.统计数据

db.collection.count() //查询所有

db.collection.count({"":""}) //查询指定条件数量

2.显示指定条数

db.comment.find().limit()

3.跳过某些数据进行查询

db.comment.find().limit().skip(从第几条跳过)

4.排序

db.comment.find().sort({"条件字段":"1"}) 1代表升序 -1代表降序

比较复制的查询

通过正则的形式实现模糊查询

1.db.comment.find({"字段":/条件/})

mongodb复制的正则也可也接收

大于某条件

2.db.集合名称.find({条件字段:{KaTeX parse error: Expected 'EOF', got '}' at position 18: ...:NumberInt(700)}̲}) !在这里插入图片描述...in:"1003"})

里面是个数组 可以包含多个条件

条件查询

and或者or

db.集合名称.find({KaTeX parse error: Expected '}', got 'EOF' at end of input: and:{字段:NumberInt(700)},{字段:{KaTeX parse error: Expected 'EOF', got '}' at position 19: ...NumberInt(2000)}̲}}) 点赞数大于700 小...or:{字段:"条件"},{"字段":"条件"})

索引-Index

mongodb的索引使用的是B-Tree
单字段索引

在某一字段查询添加索引, 假如添加的字段值为30 那么先查询到索引的30 在通过30找到该集合
复合索引

列出的字段顺序具有重要意义,例如符合索引由(userid:1,score:-1)组成,则索引首先按userid正序排序,然后在内个userid的值内,再在按score倒序排序。

相关推荐
我滴老baby6 分钟前
工业物联网数据库选型:把计算能力放回第一维度
数据库·人工智能·架构·pdf
Doris__HE13 分钟前
【元脑服务器NF8260G7-NF8260M7技术规格分享】
运维·服务器·网络·数据库·性能优化
用户75310571245131 分钟前
五年前我吐槽 PG 的 32 位 XID 是狗皮膏药,今天它被治好了
数据库
DBA_G35 分钟前
从湖仓一体到AI原生:GBase数据库的金融全栈技术实践
数据库
ChenLuck1 小时前
32 位 XID 的“狗皮膏药”被撕掉了:金仓 V9 的 64 位事务号实测与底层拆解
数据库
旺仔不是程序员1 小时前
判断存在用 LIMIT 1:PostgreSQL 五种 count 计数方式与 NULL 语义
数据库·后端·sql
旺仔不是程序员1 小时前
IN 操作规范:PostgreSQL 元素数量、EXISTS 替代与 = ANY 写法
数据库·后端·sql
这个DBA有点耶1 小时前
异构数据集成方案:跨平台同步的完整指南与工具选型(含实测)
数据库·sql·程序人生·架构·数据库架构·dba
蓝速科技1 小时前
会议室门牌显示模板选型与品牌视觉适配落地指南丨蓝速科技
大数据·运维·数据库·人工智能·科技
jaysee-sjc1 小时前
【苍穹外卖】Day01:从零认识企业级项目开发
java·开发语言·数据库·mysql·spring·intellij-idea·mybatis