type
status
date
slug
summary
tags
category
icon
password
comment
MongoDB
- 将MongoDB加入到Windows服务中
- 创建服务:
- 启动MongoDB:
- 删除服务:
- 停止服务:
- 导出集合
mongoexport.exe -d db_name -c collection_name -o d:.json
- 导入文件
- 数据库操作
查看版本:
db.version();
创建数据库:
use DATABASE_NAME
查看当前数据库:
db
查看数据库(空库不在列表内):
show dbs
删库:
db.dropDatabase()
- 集合操作
创建集合:
db.createCollection(name, options(可选项))
删除集合:
db.collection.drop()
查看集合:
show collections
或者
show tables
删除全部数据(集合并不会删除):
db.col.remove({})
save与insert区别:save可以替换已有的文档,insert不能。
- 基本知识点(学习通测试题)
- 可弹性扩展
- 大数据量,高性能
- Base特征
- 灵活的数据模型
- 高可用
MongoDB数据文件的存储格式为:BSON
MongoDB适合网站数据,SQL,缓存
mongodb的存储引擎:WiredTiger,MMAPv1和In-Memory。
NoSQL全称:NotOnlySQL
默认端口:27017
NoSQL特点:(没有一个明确的范围和定义,以下是mongodb书上的)
属于NoSQL的数据库种类:HBase、Redis、MongoDB、Couchbase、LevelDB
在MongoDB的集合中相当于关系的key是ObjectId;
使用CreateCollection创建固定集合时必须添加参数:capped
数据库备份命令:mongodump
gridfs定义及原理
是MongoDB中存储和查询超过BSON文件大小限制(16M)的规范
GridFS将文件分成多个块,每个块作为一个单独的文档
在MongoDB的固定集合中如果被占满,再插入新文档时,固定集合会自动将最老的文档从集合中删除。
对目标集使用insert方法,插入一个文档,这个操作不一定会给文档增加一个”_id”键,让后将其保存到MongoDB中。
空的查询文档{}会匹配集合的全部内容。要是不指定查询文档,默认就是{}。
update修改字段名称用$rename;
MongoDB服务器可以利用复制集部署多个集群,好处是:复制时将数据自动同步到多个服务器中。
MongoDB中副本集的方式可以利用仲裁机制将从节点推举成新的主节点。
MapReduce中map函数是映射,reduce函数是归并
为了维护集合的最新视图,每个成员每隔两秒钟就会系那个其他成员发送一个请求,这个请求是心跳请求。
MongoDB中部署一个分片集群需要三部分,包括Shard Server, Config
Server和Route Server。
如果在创建唯一索引时已经存在了重复项,可以通过dropDups参数消除重复文档。
MongoDB不仅支持自动故障恢复,还支持自动分片
聚合数据模型是MapReduce;
- remove与drop区别
remove:删除所有文档,但是保留索引(index)文件
db.system.indexs.find()查询索引依然存在
drop:真*删除所有文档
- find系列
- 针对数据处理的字段
- 统计所有人的指定数组的元素个数
- 正则的相关用法
结构化查询
查询在1997年1月1日之后出生的人
大小关系
相关语法(
$not
也是这个语法推荐$ne
)语法默认是and,
$or
或者$nor
用法$in
或$nin
(对in来说只要里面有一个符合,就列出来)自定义显示属性列(0:不显示,1:显示,id默认显示)
$mod
$exists
判断字段是否存在(true/false)limit
skip 查第6-10条数据
sort() : [1(升序), -1(降序)]
count()
$all
(来匹配包含数组所有元素的文档,元素顺序不影响结果)$size
(查询指定长度的数组)$slice
(用于指定查询结果中要显示的数组元素,放在find
的第二个参数中)$elemMatch
(查子文档)查询数组内部数据个数大于等于4的
- update系列
- 针对数组
$set
只更新字段(有则修改,无则追加)$inc
针对数值型的键进行加减运算$unset
删除指定key$push
无条件追加$pushAll
追加多个$addToSet
若是存在则不插入$pop
n为删除最后n个,-n为删除正数n个$pull
删除指定字段
$pullAll
与$pushAll
同理$rename
对字段重命名- aggregate系列
$group
相关 (将集合中的文档分组,可用于统计结果)$project
相关 ** (修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档)**$match
相关 (过滤数据)$skip
/$limit
相关$unwind
相关 (将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值)$sort
相关$geoNear
相关 (输出接近某一地理位置的有序文档)
$sum
、$avg
、$max
、$min
相关语法:$addToSet
、$push
与update系列规则相同将所有人员信息全部push进去(
$$ROOT
)$first
($last
)根据资源文档的排序获取第一个(最后一个)文档数据。注:除了_id:0可以使用,其他都必须统一为0或者统一为1,(选择的属性,要么都显示,要么都不显示,不能混用)
把weight重命名为newWeight
使用
$add
给weight字段的值加10,然后将结果赋值给一个新的字段:newWeight内部用法与find系列相同
- MapReduce
查询user个数:
查询归并后并显示出来:
不指定文档的话将存储在临时文档中,指定文档就会输入进去(如果没有就创建):
查询到作者有多本书以逗号分隔:
查询每个user的每种sku的数量
- createIndex()索引
- 索引的查和删
- 常用索引类型
- 常用索引属性:
- search 后的关键词可以有多个,关键词之间的分隔符可以是多种字符,例如空格、下划线、逗号、加号等,但不能是”-“和”",因为这两个符号会有其他用途。搜索的多个关键字是 or 的关系,除非你的关键字包含”-” ``
- 匹配时不是完整的单词匹配,相似的词也可以匹配到;
- 地理空间索引:
- runCommand方法:
- geoNear :我们要查询的集合名称;
- near :就是基于那个点进行搜索,这里是我们的搜索点“长沙站”;
- spherical :是个布尔值,如果为 true,表示将计算实际的物理距离,比如两点之间有多少 km,若为 false,则会基于点的单位进行计算 ;
- minDistance :搜索的最小距离,这里的单位是米 ;
- maxDistance :搜索的最大距离
查看集合索引:
查看集合索引大小:
删除集合所有索引:
删除集合指定索引:
复合索引:
多键索引:
哈希索引:
唯一索引:
局部索引:
稀疏索引:
TTL索引:
文本索引:
建立索引:(也可以建立组合索引)
查询多边形范围的值:
查询附近的值:
查询圆形内的值:
查找矩形范围:
- 创建仓库管理员
- 情况二:在受限的情况下验证身份;
用新身份进入mongo:
开启身份验证后,我们使用命令
mongo
直接连接数据库,虽然也能成功连接,但是在进行数据库操作如show dbs
时会受到限制:这是我们就要进入到
admin
数据库,去进行身份验证:返回数字1
说明验证成功,0
说明失败,验证成功后将拥有管理员权限- 创建普通用户
创建用户:
user2
,密码:user2
,对数据库test2
有读写权限,对数据库test
有只读权限删除用户
- 限制ip访问
- Profiling 工具
- 用慢查询日志(system.profile)找到超过50ms 的语句;
- 然后再通过 .explain() 解析影响行数,分析为什么超过50ms;
- 决定是不是需要添加索引
- 0:关闭,不收集任何数据;
- 1:收集慢查询数据,默认是100毫秒;
- 2:收集所有数据
优化步骤一般是:
Profiling 有两种开启方式,一种是启动服务时配置启动,一种是 mongoshell
中进行实时配置。
Profiling 级别说明:
全局开启 Profiling:
关闭 Profiling
工具:(只需要将收集慢查询数据的时间设置为0就可以关闭):
db.getProfilingLevel(0)
mongo shell 中启动配置:
查看状态:
db.getProfilingStatue()
查看级别:
db.getProfilingLevel()
设置级别:
db.setProfilingLevel(1)
设置级别和时间:
db.setProfilingLevel(1,50)
时间50ms- 只在linux有效
- op :操作类型;
- ns :被查的集合;
- commond :命令的内容;
- docsExamined :扫描文档数;
- nreturned :返回记录数;
- millis :耗时时间,单位毫秒;
- ts :命令执行时间;
- responseLength :返回内容长度。
- 常用的慢日志查询命令
- 返回最近的10条记录:
- 返回所有的操作,除 command 类型的:
- 返回特定集合:
- 返回大于5毫秒慢的操作:
- 从一个特定的时间范围内返回信息:
- 特定时间,限制用户,按照消耗时间排序:
- 查看最新的 Profile 记录:
- 显示5个最近的事件(这个Windows有反应但是数据不对):
返回所有结果:
profile 部分字段解释:
- 主从复制
配置文件:
主从复制的其他设置项
- 副本集的搭建(Linux)
相关文件配置(可将其配置到对应的数据库地址中,注释的地方修改后就是一个新的副本):
- 副本集的搭建(Windows)
主节点出现故障,其余服务器会被推选出主节点,出现故障的服务器修好后,自动变成副节点
- 头歌上的副本搭建
配主节点并配置仲裁:
切换 Primary 节点到指定的节点
- 头歌的分片集搭建
配置文件设置
配置文件 (新建在 /etc/mongo 目录下):(其中 shardsvr
是用来开启分片的。)
config 节点
连接 route 节点:
mongo localhost:10004
输入以下命令:
route 节点
连接上 route 节点:
mongo localhost:10005
添加分片:
查看集群的状态:分片摘要信息、数据库摘要信息、集合摘要信息等:
sh.status()
分片验证:
- 作者:obsidianlyg
- 链接:obsidianlyg.top/article/db1a7b17-0aaa-4ee9-9655-3fdb1d30eea9
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章