MongoDB数据操作

MongoDB课堂笔记

  • 查看数据库
    • 选择数据库
    • 删除数据库
    • 全部笔记

查看数据库

show databases/dbs。

选择数据库

use 数据库名 (隐式创建)

删除数据库

1、通过use语法选中数据库
2、通过db.dropDatabase()

全部笔记

// An highlighted block
#查看数据库
show databases/dbs
#选择数据库
use 数据库名 (隐式创建)
#删除数据库
1、通过use语法选中数据库
2、通过db.dropDatabase()
#查看集合
show collections/tables
#创建集合
db.createCollection("集合名")
#删除 集合
db.集合名.drop()
#在数据库中插入数据
use 指定数据库
db.集合名.insert({ })
数据库和集合都不存在的话就会隐式创建
对象的键统一不加引号方便看,但是查看集合数据时系统会自动加
#快速插入10条数据 (支持部分json语句)
use test1
for (var i=1;i<=10;i++){ 
db.c1.insert({ name:"a"+i,age:i})
}
#查询数据
db.集合名.find({ }{ 查询的列} ,{ },{ })
运算符	作用
$gt		大于
$gte		大于等于
$lt		小于
$lte		小于等于
$ne		不等于
$in		in
$nin		not in
db.集合名.find({ :{ 运算符:}})
eg: 查询年龄大于5
db.c1.find({ age:{ $gt:5}})
eg:查询年龄是5810
db.c1.find({ age:{ $in:[5,8,10]}})
eg:只看年龄列
db.c1.find({ },{ age:1,_id:0})
#更改数据
db.集合名.update(匹配,新数据,是否新增,是否修改多条)    4个参数
默认falsefalse
升级语法:运算符		作用
$inc		递增
$rename	重命名列
$set		修改列值
$unset	删除列
db.集合名.update(匹配,新数据)
{ 修改器:{ :}}
准备工作:插入10 条数据
use test2
for(var i=1; i<=10; i++){ 
db.c3.insert({ "uname":"zs"+i,"age":i})
}
将zs1 改为 zs2
db.c3.update({ "uname":"zs1"},{ "uname":"zs2"})	(这是替换)
db.c3.update({ uname:"zs1"},{ $set:{ uname:"zs22"}})	(这才是修改)
将zs10 年龄加2或减2
db.c3.update({ uname:"zs10"},{ $inc:{ age:2}})		(2就是加-2)
db.c4.insert({ uname:"神龙教主",age:888,who:"男",other:"非洲人"})
需求: uname改成 webppenfather	($set)
age增加111				($inc)
who改字段sex			($rename)
other删除				($unset)
:db.c4.update({ uname:"神龙教主"},{ $set:{ uname:"webopenfather"},$inc:{ age:111},$rename:{ who:"sex"},$unset:{ other:true}})
#文档的删除
db.集合名.remove(条件,是否删除一条)
默认是false
也就是删除多条
集合名称:school
集合字段::编号、学号、姓名、电话、性别、年龄、学历、备注
use school
switched to db school
for (var num=1; num<=20; num++){ 
db.stu.insert({ id:num,no:"QF"+num,tel:"111111111",sex:"女",age:num,school:"研究生",remark:"土豪"})
}
#排序、分页
准备:
use test3
db.c1.insert({ _id:1,name:"a",sex:1,age:1})
db.c1.insert({ _id:2,name:"a",sex:1,age:2})
db.c1.insert({ _id:3,name:"b",sex:2,age:3})
db.c1.insert({ _id:4,name:"c",sex:2,age:4})
db.c1.insert({ _id:5,name:"d",sex:2,age:5})
db.c1.find()
排序
语法:db.集合名.find().sort(json数据)
说明:键-就是要排序的列/字段、 值:1 升序  -1 降序
联系:年龄升序&降序
db.c1.find().sort({ age:1})
db.c1.find().sort({ age:-1})
Limit 与 skip 方法
语法:db.集合名.find().sort().skip(数字)limit(数字)
说明:skip跳过指定数量(可选),limit限制查询的数量
练习1-降序查询22-降序跳过2条并查询2条
db.c1.find().sort({ age:-1}).skip(0).limit(2)
db.c1.find().sort({ age:-1}).skip(2).limit(2)
实战分页:数据库1 - 10 数据,每页显示两条	(5页)
语法:db.集合名.find().skip().limit(2)
skip计算公式: (当前页 - 1* 每页显示条数
11	2		0
23	4		2
35	6		4
47	8		6
59	10		8
#聚合查询(分组统计)
db.aggregate([{ 管道:{ 表达式}}...])
常用管道:
$group	将集合中的文档分组,用于统计结果
$match	过滤数据,只要输出符合条件的文档
$sort		
聚合数据进一步排序
$skip		跳过指定文档数
$$limit	限制集合数据返回文档数
...
常用表达式
$sum 总和	$sum:1同count表示统计
$avg	平均
$min	最小值
$max	最大值
...
准备:
use test4
db.c1.insert({ _id:1,name:"a",sex:"男",age:1})
db.c1.insert({ _id:2,name:"a",sex:"男",age:2})
db.c1.insert({ _id:3,name:"b",sex:"女",age:3})
db.c1.insert({ _id:4,name:"c",sex:"女",age:4})
db.c1.insert({ _id:5,name:"d",sex:"女",age:5})
1、统计男生、女生的总年龄
db.c1.aggregate([{ 
$group:{ _id:"$sex",
result:{ $sum:"$age"}}
}])
2、统计学生综述和平均年龄
db.c1.aggregate([
{ $group:{ _id:null,
total_num:{ $sum:1},total_avg:{ $avg:"$age"}}}])
3、查询男生女生人数,按人数升序
db.c1.aggregate([{ $group:{ _id:"$sex",result:{ $sum:1}}},{ $sort:{ result:1}}])
#索引
创建语法:db.集合名.createIndex(待创建索引的列[,额外选项])
参数:
删除:db.集合名.dropIndexes()	(全部删除)
指定删除:db.集合名.dropIndex(索引名)
查看索引语法:db.集合名.getIndexes()
准备:添加十万数据
use test5
for(var i=0;i<100000;i++){ db.c1.insert({ 'name':"aaa"+i,"age":i})}
:需求:给name添加普通索引
db.c1.createIndex({ name:1})	
删除name索引,
db.c1.dropIndex('name_1')
给name创建索引并起名webopenfather
db.c1.createIndex({ name:1},{ name:"webopenfather"})
复合索引:
给name和age添加组合索引
语法:db.集合名.createIndex({ })
db.c1.createIndex({ naem:1,age:1})
唯一索引:
给name添加普通索引
语法:db.集合名.createIndex(待添加索引的列,{ unique:列名})
练习:删除全部索引,命令:db.c1.dropIndexes();
练习:设置唯一索引,命令:db.c1.createIndex({ name:1},{ unique:"name"})
练习:测试唯一索引特性,命令: db.c1.insert({ name:"a"})
db.c1.insert({ name:"a"})
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')
# mongo权限机制
创建账号
db.createUser({ 
"user":"账号""pwd":"秘密""roles":[{ 
role:"角色",
db:"所属数据库"
}]
})
角色:
#角色种类
超级用户角色:root
数据库用户角色:read、readwrite;
数据库管理角色:dbAdmin、userAdmin
集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
备份恢复角色:backup、restore;
所有数据库角色:readAnyDatabase、readwriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
开启验证模式:
1、添加超级管理员	
mongo
use admin	
db.createUser({ "user":"wenwei","pwd":"wenwei0106","roles":[{ role:"root",db:"admin"}]})
2、退出卸载服务
bin\mongod --remove		(dos窗口必须用管理员身份运行)
3、重新安装需要输入账号密码的服务(在原安装命令基础上加上--auth即可)
D:\MongoDB\bin>mongod --install --dbpath D:\MongoDB\data --logpath D:\MongoDB\log\mongodb2.log --auth
4、启动服务 -> 登入测试
登入mongo后没有警告,且show dbs 看不见数据库了
# 通过超级管理员账号登入
语法1:mongo 服务器IP地址:端口、数据库 -u 用户名 -p 密码
D:\MongoDB\bin>mongo 127.0.0.1:27017/admin -u wenwei -p wenwei0106
语法2:a- 先登入,b-选择数据库,c-输入db.auth(用户名,密码)
use admin
db.auth('wenwei','wenwei0106')
#角色说明
root:只在admin数据库中可用。超级账号,超级权限;
read:允许用户读取指定数据库;
readwrite:运行用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile;
db.AdminAnyDatabase:只在admin数据库中可用,,赋予用户所有数据库的dbAdmin权限;
需求:
添加用户shop1可以读shop数据库
添加用户shop2可以读写shop数据库
准备:
use shop
for(var i=1;i<=10;i++){ db.goods.insert({ "name":"goodsName"+i,"price":i})}
添加用户并设置权限
use shop
##shop1
db.createUser({ 
"user":"shop1",
"pwd":"admin888",
"roles":[{ 
role:"read",
db:"shop"
}]
})
##shop
db.createUser({ 
"user":"shop1",
"pwd":"admin888",
"roles":[{ 
role:"readWrite",
db:"shop"
}]
})

本文地址:https://blog.csdn.net/weixin_44262169/article/details/112557622

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐