type
status
date
slug
summary
tags
category
icon
password

MongoDB

  • 将MongoDB加入到Windows服务中
    • 创建服务:
      • 启动MongoDB:
        • 删除服务:
          • 停止服务:
          • 导入文件
            • 数据库操作
              • 查看版本: 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不能。
            • 基本知识点(学习通测试题)
              • MongoDB数据文件的存储格式为:BSON
                MongoDB适合网站数据,SQL,缓存
                mongodb的存储引擎:WiredTiger,MMAPv1和In-Memory。
                NoSQL全称:NotOnlySQL
                默认端口:27017
                NoSQL特点:(没有一个明确的范围和定义,以下是mongodb书上的)
                1. 可弹性扩展
                1. 大数据量,高性能
                1. Base特征
                1. 灵活的数据模型
                1. 高可用
                属于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 若是存在则不插入
                      $popn为删除最后n个,-n为删除正数n个
                      $pull 删除指定字段 $pullAll$pushAll同理
                    $rename 对字段重命名
                • aggregate系列
                  • $group相关 (将集合中的文档分组,可用于统计结果)
                    • $sum$avg$max$​​min相关语法:
                      $addToSet$​push与update系列规则相同
                      将所有人员信息全部push进去($$ROOT)
                      $first($​last)根据资源文档的排序获取第一个(最后一个)文档数据。
                  • $project相关 ** (修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档)**
                    • 注:除了_id:0可以使用,其他都必须统一为0或者统一为1,(选择的属性,要么都显示,要么都不显示,不能混用)
                      把weight重命名为newWeight
                      使用$add给weight字段的值加10,然后将结果赋值给一个新的字段:newWeight
                  • $match相关 (过滤数据)
                    • $skip/$​limit相关
                      • $unwind相关 (将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值)
                        • $sort相关
                          • 内部用法与find系列相同
                        • $geoNear相关 (输出接近某一地理位置的有序文档)
                      • MapReduce
                        • 查询user个数:
                          查询归并后并显示出来:
                          不指定文档的话将存储在临时文档中,指定文档就会输入进去(如果没有就创建):
                          查询到作者有多本书以逗号分隔:
                          查询每个user的每种sku的数量
                      • createIndex()索引
                        • 索引的查和删
                          • 查看集合索引:
                            查看集合索引大小:
                            删除集合所有索引:
                            删除集合指定索引:
                        • 常用索引类型
                          • 复合索引:
                            多键索引:
                            哈希索引:
                        • 常用索引属性:
                          • 唯一索引:
                            局部索引:
                            稀疏索引:
                            TTL索引:
                            文本索引:
                          • search 后的关键词可以有多个,关键词之间的分隔符可以是多种字符,例如空格、下划线、逗号、加号等,但不能是”-“和”",因为这两个符号会有其他用途。搜索的多个关键字是 or 的关系,除非你的关键字包含”-” ``
                          • 匹配时不是完整的单词匹配,相似的词也可以匹配到;
                        • 地理空间索引:
                          • 建立索引:(也可以建立组合索引)
                            查询多边形范围的值:
                            查询附近的值:
                            查询圆形内的值:
                            查找矩形范围:
                          • runCommand方法:
                            • geoNear :我们要查询的集合名称;
                            • near :就是基于那个点进行搜索,这里是我们的搜索点“长沙站”;
                            • spherical :是个布尔值,如果为 true,表示将计算实际的物理距离,比如两点之间有多少 km,若为 false,则会基于点的单位进行计算 ;
                            • minDistance :搜索的最小距离,这里的单位是米 ;
                            • maxDistance :搜索的最大距离
                      • 创建仓库管理员
                        • 用新身份进入mongo:
                        • 情况二:在受限的情况下验证身份;
                          • 开启身份验证后,我们使用命令mongo直接连接数据库,虽然也能成功连接,但是在进行数据库操作如show dbs时会受到限制:
                          这是我们就要进入到admin数据库,去进行身份验证:返回数字1说明验证成功,0说明失败,验证成功后将拥有管理员权限
                      • 创建普通用户
                        • 创建用户:user2,密码:user2,对数据库test2有读写权限,对数据库test有只读权限
                          删除用户
                      • 限制ip访问
                        • Profiling 工具
                          • 优化步骤一般是:
                          • 用慢查询日志(system.profile)找到超过50ms 的语句;
                          • 然后再通过 .explain() 解析影响行数,分析为什么超过50ms;
                          • 决定是不是需要添加索引
                          • Profiling 有两种开启方式,一种是启动服务时配置启动,一种是 mongoshell 中进行实时配置。
                            Profiling 级别说明:
                          • 0:关闭,不收集任何数据;
                          • 1:收集慢查询数据,默认是100毫秒;
                          • 2:收集所有数据
                          • 全局开启 Profiling:
                            关闭 Profiling 工具:(只需要将收集慢查询数据的时间设置为0就可以关闭):db.getProfilingLevel(0)
                            mongo shell 中启动配置:
                            查看状态: db.getProfilingStatue()
                            查看级别: db.getProfilingLevel()
                            设置级别: db.setProfilingLevel(1)
                            设置级别和时间: db.setProfilingLevel(1,50) 时间50ms
                        • 只在linux有效
                          • 返回所有结果:
                            profile 部分字段解释:
                          • op :操作类型;
                          • ns :被查的集合;
                          • commond :命令的内容;
                          • docsExamined :扫描文档数;
                          • nreturned :返回记录数;
                          • millis :耗时时间,单位毫秒;
                          • ts :命令执行时间;
                          • responseLength :返回内容长度。
                          • 常用的慢日志查询命令
                            • 返回最近的10条记录:
                              • 返回所有的操作,除 command 类型的:
                                • 返回特定集合:
                                  • 返回大于5毫秒慢的操作:
                                    • 从一个特定的时间范围内返回信息:
                                      • 特定时间,限制用户,按照消耗时间排序:
                                        • 查看最新的 Profile 记录:
                                          • 显示5个最近的事件(这个Windows有反应但是数据不对):
                                        • 主从复制
                                          • 配置文件:
                                            主从复制的其他设置项
                                        • 副本集的搭建(Windows)
                                          • 主节点出现故障,其余服务器会被推选出主节点,出现故障的服务器修好后,自动变成副节点
                                        • 头歌上的副本搭建
                                          • 配主节点并配置仲裁:
                                            切换 Primary 节点到指定的节点
                                        • 头歌的分片集搭建
                                          • 配置文件设置
                                            配置文件 (新建在 /etc/mongo 目录下):(其中 shardsvr 是用来开启分片的。)
                                            config 节点
                                            连接 route 节点:mongo localhost:10004
                                            输入以下命令:
                                            route 节点
                                            连接上 route 节点:mongo localhost:10005
                                            添加分片:
                                            查看集群的状态:分片摘要信息、数据库摘要信息、集合摘要信息等:sh.status()
                                            分片验证:
                                        vim关于UniApp使用的个人笔记
                                        Loading...