欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MongoDB数据操作

程序员文章站 2022-06-17 22:38:10
MongoDB课堂笔记查看数据库选择数据库删除数据库全部笔记查看数据库show databases/dbs。选择数据库use 数据库名 (隐式创建)删除数据库1、通过use语法选中数据库2、通过db.dropDatabase()全部笔记// An highlighted block#查看数据库show databases/dbs#选择数据库use 数据库名 (隐式创建)#删除数据库1、通过use语法选中数据库2、通过db.dropDatabase()#查看...

查看数据库

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

相关标签: mongodb