简介

MongoDB为面向文档(基于分布式文件存储)数据库(非关系型数据库)非关系型数据库的构造:一台服务器 => 数据库 => 汇合 => 文档非关系型数据库用于超大规模数据的存储面向文档数据库会将数据以文档模式存储。每个文档都是自蕴含的数据单元,是一系列数据项的汇合。每个数据项都有一个名词与对应值,值既能够是简略的数据类型,如字符串、数字和日期等;也能够是简单的类型,如有序列表和关联对象。数据存储的最小单位是文档,同一个表中存储的文档属性能够是不同的,数据能够应用XML、JSON或JSONB等多种形式存储长处:高性能,易部署,易使用,存储数据不便面向汇合存储,易存储对象类型的数据模式自在反对动静查问反对齐全索引,蕴含外部对象反对查问反对复制和故障复原应用高效的二进制数据存储,包含大型对象(如视频)主动解决碎片,以反对云计算档次的扩展性反对ruby,python,java,c++,php等多种语言文件存储格局为BSON(一种JSON的扩大),可间接存储对象,数组局部利用场景:视频直播:应用MongoDB存储点赞,评论,弹幕信息...游戏场景:应用MongoDB存储打怪记录,用户积分...社交场景:应用MongoDB存储朋友圈信息,浏览记录...电商场景:应用MongoDB存储购物车,珍藏...官网:https://www.mongodb.com/

MongoDB的装置

下载安装地址:https://www.mongodb.com/try/downloadwindows具体装置与配置教程可查看网址:https://blog.csdn.net/baidu_39298625/article/details/98592631

MongoDB的可视化工具

RoBo3T是MongoDB的可视化界面管理工具下载安装地址:https://robomongo.org/download具体装置与配置教程可查看网址:https://www.cnblogs.com/smart-girl/p/11283449.html

MongoDB的文件目录阐明

将MongoDB装置成window服务

先在非系统盘下创立一个文件夹mongodb,再创立两个子文件夹db和log应用命令挂载服务:在cmd中输出命令:mongod --dbpath "G:\mongodb\db"(db的门路)--logpath "G:\mongodb\log\mongodb.log"(log文件夹的门路,主动创立一个mongodb.log文件)--install --serviceName "MongoDB"(服务名称)查看服务:我的电脑 -> 右键 -> 治理 -> 服务与应用程序 -> 服务应用这些命令的前提是已挂载到windows服务上开启服务的命令:net start mongodb(服务名)敞开服务的命令:net stop mongodb(服务名)卸载服务的命令:sc delete mongodb(服务名)没有挂载服务的话,可间接在cmd中进入mongodb的bin目录下,输出命令:mongod --dbpath= G:\mongodb\data(data的门路)来开启服务

MongoDB常用命令

进入数据库管理模式:mongo在数据库管理模式中只能执行数据库命令,不能执行其余命令

退出数据库管理模式:exit罕用的数据库命令:1. 显示所有的数据库列表:show dbs2. 创立数据库:use 数据库名 (若数据库名不存在则创立,若已存在则进入)3. 查看以后数据库是哪个:db4. 删除数据库:db.dropDatabase()对于汇合的命令: 1. 显示以后数据库的所有汇合:show collections2. 创立汇合:db.汇合名.insert({}) (通常在创立数据时主动创立汇合,不须要独自创立)            db.createCollections(汇合名)3. 删除汇合:db.汇合名.drop()对于文档(数据)的操作:1. 新增文档(数据):db.汇合名.insert({BSON数据}) (向汇合中插入一条数据)(举荐应用)                    db.汇合名.save({BSON数据}) (向汇合中插入一条数据,若汇合中曾经存在该数据则更新)(该办法新版本已弃用,可应用db.汇合名.insertOne()或db.汇合名.replaceOne())                    db.汇合名.insertOne({BSON数据}) 2. 查看文档(数据):db.汇合名.find() (查找以后汇合中的所有数据,是个数组)                    db.汇合名.find({条件对象}) (查找符合条件的文档(数据))                    db.汇合名.findOne() (查找以后汇合中的第一条数据)                    db.汇合名.find().pretty() (将找到的数据以格式化的结果显示进去)3. 批改文档(数据):db.汇合名.update(查找的对象,批改后果)                    db.汇合名.update({批改1},{批改2},{multi:true}) ({multi:true}示意能更新多条数据)                    db.汇合名.update({条件},{$inc:{key:value}}) ($inc实现对某列的值进行自增操作)4. 删除文档(数据):db.汇合名.remove({}) ({}为空则删除以后汇合中的所有数据,{}有值则删除合乎对应条件的数据)(因为删除和更新操作数据会造成极大影响,所以要审慎!)一些高级命令:1. 按指定条件查问:db.汇合名.find({key:value})2. 按大于某个范畴的条件查问:db.汇合名.find({key:{$gt:value}}) (key>value)3. 按大于等于某个范畴的条件查问:db.汇合名.find({key:{$gte:value}}) (key>=value)4. 按小于某个范畴的条件查问:db.汇合名.find({key:{$lt:value}}) (key<value)5. 按小于等于某个范畴的条件查问:db.汇合名.find({key:{$lte:value}}) (key<=value)6. 查问指定范畴的数据:db.汇合名.find({key:{$gt:value1,$lt:value2}})7. 查问指定的数据是否在数组中:db.汇合名.find({key:{$in:[...]}})8. 按数组元素的个数查找:db.汇合名.find({key:{$size:数量}})9. 查找多个条件中合乎其中一个条件的数据:db.汇合名.find({$or:[{key1:value1},{key2:value2},...}]})10. 查找同时合乎多个条件的数据:db.汇合名.find({key1:value1,key2:value2})11. 排序:db.汇合名.find().sort({key1:1/-1,key2:1/-1}) (1代表升序,-1代表降序)12. 限定输入数据的条数.limit(Number),跳过指定的数据条数.skip(Number) (配合应用,个别用作分页性能)    返回汇合的条数:db.汇合名.find().count()e.g. 当初有100条数据,每页显示10条,一共有多少页?(10页)     若以后在第2页上,应显示哪些数据?(11-20之间的数据(即跳过前10条))13. 含糊查问:db.汇合名.find({key:/相应的reg/}) (可用于查找某姓之人或含某些关键字的)

MongoDB---聚合函数

MongoDB中聚合次要用于解决数据(如:统计平均值,求和等),并返回计算后的数据后果聚合的办法应用aggregate()根本的语法格局:db.汇合名.aggregate([    {        管道:(聚合操作表达式)    }])管道:把聚合操作表达式找到的数据进行过滤



罕用的聚合表达式:$sum:计算总和({$sum:1}相当于count(*)计算全副)$avg:计算平均值$min:获取汇合中所有文档对应值的最小值$max:获取汇合中所有文档对应值的最大值例子:

MongoDB的平安认证(理解)

查问所有角色权限(仅含用户自定义角色):db.runCommand({rolesInfo:1})查问所有角色权限(蕴含内置角色的所有角色):db.runCommand({rolesInfo:1,showBuiltinRoles:true})查问其它数据库中指定的角色权限:db.runCommand({rolesInfo:{role:角色名,db:数据库名}})查问多个角色权限:db.runCommand({rolesInfo:[角色名...,{role:角色名,db:数据库名}]})常见的角色:

增加用户和权限:进入数据库后

认证测试:切换到admin数据库中,输出命令:db.auth('账号','明码')创立普通用户:

开启认证:


MongoDB---索引

索引分类:单字段索引,复合索引,天文空间索引,文本索引,哈希索引,...全文检索:

启用全文检索:

创立索引:db.汇合名.createIndex(keys,options)options的配置:background(布尔类型,默认为false,指定是否后盾创立索引。在创立索引过程中会阻塞数据库的其余操作,而后盾创立就会防止这种问题)               unique(布尔类型,默认为false,指定建设的索引是否惟一)                name(索引名称,默认通过建设索引的字段名和排序程序生成索引名称) 删除索引:db.汇合名.dropIndex(索引名称或索引键值对)查看索引:db.汇合名.getIndexes() (返回一个汇合中的所有索引)查看汇合索引大小:db.汇合名.totalIndexSize()利用查问剖析可确保建设的索引是否无效:

MongoDB---数据库备份与复原

备份:应用mongodump命令(可导出所有数据到指定目录中,还可通过参数指定导出的数据量级转存的服务器)mongodump命令语法:



复原:应用mongorestore命令mongorestore命令语法:


mongoose模块

node.js利用mongoose模块来操作MongoDB,是一种便捷的封装,一种对象模型工具  mongoose官网:http://www.mongoosejs.net/装置mongoose:npm install mongoose (装置前提是要先装置express框架)引入mongoose模块:var mongoose = require('mongoose');连贯数据库:mongoose.connect('mongodb://127.0.0.1:27017/数据库名(服务器地址)',(err)=>{...(有谬误则throw err)}) (MongoDB的默认端口号为:27017)(在routers目录下的index.js中编写连贯数据库的命令)骨架Schema:一种以文件模式存储的数据库模型骨架,不具备数据库操作能力不仅定义了文档构造和使用性能还能够扩大插件,实例办法,复合索引,文档生命周期钩子Model:由Schema公布生成的模型,具备形象属性和行为的数据库操作的能力,通常用于读取数据库(查)Entity:由Model创立的实体,其操作也会影响数据库,通常用于写数据(增删改)连贯数据库后,存储数据的步骤:定义骨架(Schema)-> 创立模型(Model)-> Entity实例化办法定义骨架:var schema=new mongoose.Schema({    字段名:类型,(类型:String,Number,Date,Buffer,ObjectId,Array,Boolean,...)(若骨架没有定义属性及类型,是不能被加进数据库的)    ...})创立模型:var model=mongoose.model(模型名,骨架名,汇合名称(与模型名保持一致))创立好model后,就能够应用相应的办法:依据条件进行数据查问,能够找出多条数据:model.find({条件},(err,data)=>{...(data是从数据库中读取到的数据)}) (find找进去的数据肯定是一个数组)依据id查找一条数据:model.findById('id',(err,data)=>{..,}) (findById找进去的数据是一个对象)另一种罕用写法:model.find({}).limit().exec((err,data)=>{...})  (益处是可实现链式调用)创立实体Entity(依赖于Model):var 实体名=new 对应的模型();新增数据:实体名.属性名=属性值;实体名.save(()=>{});  (将增加到实体上的属性保留到数据库中)删除数据:先找出要删除的数据,再调用remove()办法删除数据:实体名.remove(()=>{}); 如:model.findById(id).exec((err,data)=>{data.remove(err)=>{...}})批改数据:先找出要批改的数据,将数据批改后保留回数据库如:model.findById(id).exec((err,data)=>{data.name=新值;data.save(()=>{...}))})