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"
		}]
})




























你可能感兴趣的:(mongodb)