一、 查看数据库

Show databases

二、 选择数据库

Use 数据库名
PS:在数据库中,选择不存在的数据库不会报错,后期当该数据库有数据时,系统自动创建 (隐式创建)

三、 查看集合

Show collections

四、 创建集合

db.createCollection(“集合名”)

五、 删除集合

db.集合名.drop()

MongoDB文档增删改查

1. 增

db.集合名.insert({uname:””,age:xx})
Ps:数据库和集合不存在,隐式创建;对象的键统一不加引号,方便看,但是查看集合数据时系统会自动加;mongodb会自动为每条数据自动生成一个唯一的_id,其组成为时间戳+机器+PID+计数器。可自定义_id键,只需要给插入的json数据增加_id键即可覆盖(不推荐)
如何插入多条记录?

db.集合名.insert([
 { uname:””,age:xx },
 { uname:””,age:xx },
 { uname:””,age:xx }
 ])

如何快速插入10条数据——mongodb底层使用JS引擎实现的,所以支持部分js语法

for(var i=1; i<=10;i++){
 db.集合名.insert({uname:”a”+i, age:i})
 }
2. 查看
db.集合名.find({查询条件},{查询列})
db.集合名.find().pretty() ——查询结果格式化
 查询条件:
 查询age=6的数据——db.集合名,find({age:6})
 查询age=6且sex=男的数据 {age:6, sex:”男”}
 查询age>5的数据——db.集合名.find({键:{运算符:值}})
 db.集合名.find({age:{$gt:5}})查询age为5/8/10的数据——db.集合名.find({age:{$in:[5,8,10]}})
 Ps:运算符
 大于 $gt
 大于等于 $gte
 小于 $lt
 小于等于 $lte
 不等于 $ne
 In $in
 Not in $nin查询列:
 {age:1}只显示age列——db.集合名.find({},{age:1})
 {age:0}除了age列——db.集合名.find({},{age:0})

不管怎么写系统自定义的_id都会在

3. 改
db.集合名.update(条件,新数据[,是否新增,是否修改多条])
 是否新增:指条件匹配不到数据则插入(true插入,false不插入默认)
 是否修改:指将匹配成功的数据都修改(true修改,false不修改默认)
 db.c3.update({uname:”zs1”},{uname:”zs2”})——不是修改,是替换
 使用修改器:
 $inc 递增
 $rename 重命名列
 $set 修改列值
 $unset 删除列db.c3.update({uname:”zs1”},{KaTeX parse error: Expected 'EOF', got '}' at position 18: …t:{uname:”zs2”}}̲) ——多条数据,默认只改…inc:{age:2}})
 年龄减少2岁——db.c3.update({uname:”zs1”},{KaTeX parse error: Expected 'EOF', got '}' at position 13: inc:{age:-2}}̲) 举例实现以下需求: Una…set:{uname:”神主教”}},
 {KaTeX parse error: Expected 'EOF', got '}' at position 13: inc:{age:11}}̲, {rename:{who:”sex”}},
 {$unset:{other:true}}
 })db.c3.update({},{uname:”zs30”},{KaTeX parse error: Expected 'EOF', got '}' at position 13: set:{age:30}}̲) 数据不存在,不修改 db…set:{age:30}},false) 数据不存在,不修改
 db.c3.update({},{uname:”zs30”},{$set:{age:30}},true) 数据不存在,新插入到数据库db.c3.update({},{KaTeX parse error: Expected 'EOF', got '}' at position 13: set:{age:10}}̲,fasle,fasle) 只…set:{age:10}},fasle,true) 修改多条
4. 删
db.集合名.remove(条件[,是否删除一条])
 是否删除一条true是,false否默认
 db.c3.remove({},true) 删除一条
 db.c3.remove({},false) 删除全部
Mongodb排序和分页
排序
 db.集合名.find().sort(JSON数据)
 说明:键就是要排序的列/字段、值:1升序 -1降序
 年龄升序
 db.c1.find().sort({age:1})
 年龄降序
 db.c1.find().sort({age:-1})分页
 Db.集合名.find()sort().skip(数字).limit(数字)
 Skip跳过指定数量(可选),limit限制查询的数量
 降序查询2条
 Db.c1.find().sort({age:-1}).skip(0),limit(2)
 降序跳过2条并查询2条
 Db.c1.find().sort({age:-1}).skip(2).limit(2)
 需求:数据库1-10数据,每页显示2条(5页)
 Db.集合名.find().skip().limit(2)
 Skip计算公式:(当前页-1)*每页显示条数
聚合查询
Db.集合名.aggregate([
 {管道:{表达式}}
 ])
 常用管道:
 $group 将集合中的文档分组,用于统计结果
 $match 过滤数据,只要输出符合条件的文档
 $sort 聚合数据进一步排序
 $skip 跳过指定文档数
 $limit 限制集合数据返回文档数
 常用表达式:
 $sum 总和 $sum:1同count表示统计
 $avg 平均
 $min 最小值
 $max 最大值统计女生、男生的总年龄
 db.c1.aggregate([
 {
KaTeX parse error: Expected '}', got 'EOF' at end of input: group:{ _id:”sex”, //分组方式
 rs:{age”} //多加一列
 }
 }])统计男生、女生总人数
 db.c1.aggregate([
 {
KaTeX parse error: Expected '}', got 'EOF' at end of input: group:{ _id:”sex”, //分组方式
 rs:{$sum:1} //多加一列
 }
 }])求学生总数和平均年龄
 db.c1.aggregate([
 {
KaTeX parse error: Expected '}', got 'EOF' at end of input: …组 total_num:{sum:1},
 total_avg:{age”}
 }
 }])
 查询男生、女生人数,按人数升序
 db.c1.aggregate([
 {
KaTeX parse error: Expected '}', got 'EOF' at end of input: group:{ _id:”sex”, //不分组
 rs:{$sum:1}
 }
 },
 {
 $sort:{rs:1}
 }])
优化索引
索引是一种排序好的便于快速查询的数据结构
 db.集合名.createIndex(待创建索引的列)[,额外选项]
 参数:待创建索引的列:{键:1,…,键-1}
 说明:1升序-1降序,例如{age:1}表示创建age索引,并按照升序的方法存储
 额外选项:设置索引的名称或者唯一索引
 删除索引:
 全部删除:db.集合名.dropIndexes()
 删除指定: db.集合名.dropIndexes(索引名)
 查看索引:db.集合名.getIndexes()给name添加普通索引
 db.c1.createIndex({name:1})
 删除name的索引
 db.dropIndex(“name_1”)
 给name创建索引并起名字name_c1
 db.c1.createIndex({name:1},{name:”name_c1”})
 给name和age创建复合\组合索引
 db.集合名. createIndex ({键1:存储方式,键2:存储方式})
 db.c1.createIndex({name:1,age:1})
 创建唯一索引
 db.集合名. createIndex (待添加索引的列,{unique:列名})
 db.c1.createIndex({name:1},{unique:”name”})分析索引
db.集合名.find().explain(“executionStats’”)
 COLLSCAN全表扫描
 IXSCAN索引扫描
 FETCH根据索引法检索指定document
 age未添加索引的情况
 db.c1.find({age:18}).explain(‘executionStats’)
 age添加索引
 db.c1.createIndex({age:1})
 db.c1.find({age:18}).explain(‘executionStats’)选择规则(如何选择合适的列创建索引)
 为常做条件、排序、分组、联合操作的字段建立索引
 选择唯一性索引(同值较少如性别字段)
 选择较小的数据列,为较长的字符串使用前缀索引(索引文件更小)
权限机制
使用权限机制,开启验证模式
 db.createUser({
 “user”:”账号”,
 “pwd”:”密码”,
 “roles”:[{
 role:“角色”,
 db:”所有数据库”
 }]
 })
 角色种类:
 超级用户角色:root
 数据库角色:read、readwrite
 数据库管理角色:dbAdmin、userAdmin
 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager
 备份恢复角色:backup、restore
 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase角色说明:
 Root:只在admin数据库中可用,超级账号,超级权限
 Read:允许用户读取指定数据库
 Readwrite:允许用户读写指定数据库
开启验证模式指用户需要输入账号密码才能登陆使用

步骤:

1. 添加超级管理员
2. 退出卸载服务
3. 重新安装需要输入账号密码的服务(注在原安装命令基础上加—auth即可)
4. 启动服务->登陆测试
5. Mongo
 use.admin
 db.createUser({
 “user”:”admin”,
 “pwd”:”admin888”,
 “roles”:[{
 role:’root’,
 db:”admin”
 }]
 })
 Ps:早起版本默认看不到admin用户6. Bin\mongod –remove
 Ps:dos窗口必须用管理员身份运行7. Bin\mongod --install --dbpath D:\Mongo\data --logpath D:\Mongo\logs\mongo2.log —auth
8. Net start mongodb
 方法1:Mongo服务器IP地址:端口/数据库 -u 用户名 -p 密码
 方法2:先登录 选择数据库 输入db.auth(用户名,密码)

添加用户并设置权限

Use shop
 //shop1
 db.createUser({
 “user”:”shop1”,
 “pwd”:”admin888”,
 “roles”:[{
 role:’read,
 db:”shop”
 }]
 })
 //shop2
 db.createUser({
 “user”:”shop2”,
 “pwd”:”admin888”,
 “roles”:[{
 role:’readwrite,
 db:”shop”
 }]
 })
备份数据库mongodump
Mongodump -h -prot -u -p -d -o
 -h host服务器IP地址,一般不写默认本机
 -port 端口,一般 默认27017
 -u user 账号
 -p pwd 密码
 -d database 数据库,数据库不写则导出全部
 -o open 备份到指定目录下
备份所有数据
Bin目录下
 Mongodump -u admin -p admin888 -o D:\mongodb\bak
 备份指定数据
 Mongodump -u admin -p admin888 -d shop -o D:\mongodb\bak2
还原数据库mongorestore
Mongorestore -h -port -u -p -d –drop 备份数据目录
 -d 不写则还原全部数据
 –drop 先删除数据库在导入
 还原所有数据
 Mongorestore -u admin -p admin888 --drop D:\mongodb\bak
 还原指定数据
 Mongorestore -u shop2-p admin888 -d shop --drop D:\mongodb\bak2\shop