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:查詢年齡是5、8、10
db.c1.find({age:{$in:[5,8,10]}})
eg:只看年齡列
db.c1.find({},{age:1,_id:0})
#更改資料
db.集合名.update(匹配,新資料,是否新增,是否修改多條) 4個引數
默認false,false
升級語法:運算子 作用
$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-降序查詢2條 2-降序跳過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)* 每頁顯示條數
1頁 1 2 0
2頁 3 4 2
3頁 5 6 4
4頁 7 8 6
5頁 9 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://www.uj5u.com/shujuku/248498.html
標籤:其他
上一篇:通用mapper入門
下一篇:ORACLE介紹
