文章目录
排序&分页
排序
语法:db.集合名.find().sort(JSON数据)
说明:键-就是要排序的列/字段,值:1升序 -1降序
使用:对年龄进行降序排序
db.c2.find().sort({age:-1})
分页
语法:db.集合名.find().skip(数字).limit(数字)
说明:skip里的数字指跳过指定数量(可选),limit限制查询的数量
db.c2.find().sort({age:-1}).skip(1).limit(2)
聚合查询
语法
db.集合名称.aggregate([ {管道:{表达式}} .... ]) 常用管道: $group 将集合中的文档分组,用于统计结果 $match 过滤数据,只要输出符合条件的文档 $sort 聚合数据进一步排序 $skip 跳过指定文档数 $limit 限制集合数据返回文档数 .... 常用表达式: $sum 总和 $sum:1同count表示统计 $avg 平均 $min 最小值 $max 最大值 准备: db.c3.insert({_id:1,name:"a",sex:1,age:1}) db.c3.insert({_id:2,name:"a",sex:1,age:2}) db.c3.insert({_id:3,name:"b",sex:1,age:3}) db.c3.insert({_id:4,name:"c",sex:2,age:4}) db.c3.insert({_id:5,name:"d",sex:2,age:5}) 操作: 男女生的总年龄 #_id 必须加,后跟指定列 #rew 求和 返回结果数 db.c3.aggregate([ { $group:{ _id:"$sex", res:{$sum:"$sex"} } } ]) 求男女总人数 db.c3.aggregate([ { $group:{ _id:"$sex", res:{$sum:1} } } ]) 求学生总数和平均年龄 db.c3.aggregate([ { $group:{ _id:null, res:{$sum:1}, total_avg:{$avg:"$age"} } } ]) 查询男生女生人数,升序排序 db.c3.aggregate([ {$group:{ _id:"$sex",res:{$sum:1}}}, {$sort:{res:1}} ])
优化索引
基本操作
创建索引语法: db.集合名.createIndex(待创建索引的列[,额外选项])
参数:
待创建索引的列:{键:1,…,键:-1}
说明:1升序 -1降序 列入{age:1}表示创建age索引并按照升序的方式存储
额外选项:设置索引的名称或者唯一索引等等
#创建只对单个列为条件的索引 db.c1.create({name:1}) #创建一个自己取名的索引 db.c1.create({name:1},{name:"xzy"}) #创建条件为多个列的组合索引 db.c1.create({name:1,age:-1},{"hh"}) #创建唯一索引 db.c1.createIndex({name:1},{unique:"name"})
删除索引语法:
全部删除:db.集合名.dropIndexes()
删除指定:db.集合名.dropIndex(索引名)
查看索引语法:db.集合名.getIndexes()
分析索引
语法:db.集合名.find().explain(‘executionStats’)
说明:
COLLSCAN 全表扫描
IXSCAN索引扫描
FETCH根据索引去检索指定document
权限机制
**开启验证模式概念:**指用户需要输入账号密码才能登陆使用
操作步骤:
1、添加超级管理员
2、退出卸载服务
3、重新安装需要输入账号密码的服务(注在原安装命令基础上加上–auth即可)
4、启动服务-〉登陆测试
步骤一:添加超级管理员
use admin db.createUser({ "user":"admin", "pwd":"123456", "roles":[{ role:"root", db:"admin" }] }) 查看管理员 use admin show collections db.system.users.find().pretty()
步骤二:退出卸载服务
//关闭方法db.shutdownServer() 之后exit
步骤三:安装需要验证的MongoDB服务
#使用--auth参数来开启认证服务 mongod --dbpath /usr/local/var/mongodb --logpath /usr/local/var/log/mongodb/mongo.log --auth --fork #或在config文件中添加上 security: #开启授权认证后再用配置文件来启动即可 authorization:enabled 需要账号密码的登陆方式: 方法一: mongo 服务器IP地址:mongo 127.0.0.1/admin -u admin -p 123456 方法二: mongo进入shell use admin db.auth('admin','123456') 返回1则验证成功
例子:
for(var i = 1;i<=10;i++){ db.goods.insert({"name":"goodsName"+i,"price":i}) } 添加用户shop1可以读shop数据库 db.createUser({ "user":"shop1", "pwd":"123456", "roles":[{ role:"read", db:"shop" }] }) 添加用户shop2可以读写shop数据库 db.createUser({ "user":"shop2", "pwd":"123456", "roles":[{ role:"readWrite", db:"shop" }] })
备份还原
语法:
在终端中执行,该命令不是mongo命令 导出:mongodump -h -port -u -p -d -o 导出语法说明 -h host 服务器IP地址(一般不写 默认本机) -port port 端口(不写默认27017) -u user 用户 -p pwd 密码 -d database 数据库(不写默认导出全部) -o open 备份到指定目录下 mongodump -u admin -p 123456 -o /Users/didi/xzy文件/mongo #注意 最新的mongodb版本4.4中,是没有mongodump工具的,需要通过使用brew命令单独下载 #brew install mongodb-database-tools 单独备份一个指定数据库: mongodump -u shop2 -p 123456 -d shop -o /Users/didi/xzy文件/mongo #此时好像不能使用admin作为用户来备份,可能是因为这个不是创建在shop中的用户?
Mongoose
官方:http://mongoosejs.com
中文:http://mongosejs.net/
是node中提供操作MongoDB的模块
能过通过Node语法实现MongoDB数据库CURD
从而实现使用node写程序
下载:
npm i mongoose 或者 yarn add mongoose