一. 的介紹:
1.NoSQL最常用的解釋是非關系型的數據庫
2.關系型數據庫比如MySQL和非關系型數據庫比如的區別:
關系數據庫很強大,但是它并不能很好的應付所有的應用場景。
MySQL的擴展性差,大數據下IO壓力大, 表結構更改困難
而非關系型數據庫易擴展,大數據量高性能,靈活的數據模型,可用性高
二. 的安裝:
Linux下的安裝如下圖:
三. 基本操作:
1.的服務端啟動命令:
查看幫助: –help
啟動:sudo start
停止:sudo stop
重啟:sudo
查看是否啟動成功:ps ajx|grep
配置文件的位置:/etc/.conf,
默認端?:27017
日志的位置:/var/log//.log
2.的客戶端啟動命令:
啟動本地客戶端:mongo
查看幫助:mongo –help
退出:exit或者ctrl+c
3.關于的基礎命令:
查看當前的數據庫:db
查看所有的數據庫:show dbs/show
切換數據庫:use
刪除當前的數據庫:db.()
4.關于集合的基礎命令:
不手動創建集合:向不存在的集合中第一次加入數據時, 集合會被創建出來
手動創建結合:
db.(name,)
db.("stu")
db.("sub", { : true, size : 10 } )
參數: 默認值為false表示不設置上限,值為true表示設置上限
參數size: 當值為true時, 需要指定此參數, 表示上限,當數據條數達到上限時,
會將之前的數據覆蓋, 單位為字節
查看集合:show
刪除集合:db.集合名稱.drop()
5.的數據類型:
ID: 數據ID
: 字符串, 最常用, 必須是有效的UTF-8
: 布爾值, true或false
: 整數可以是32位或64位, 這取決于服務器
: 存儲浮點值
: 數組或列表, 多個值存儲到一個鍵
: 用于嵌入式的數據, 即值為一條數據
Null: 存儲Null值
: 時間戳, 表示從1970-1-1到現在的總秒數
Date: 存儲當前日期或時間的UNIX時間格式
6.的使用注意點:
a.創建日期語句如下 :new Date('2017-12-20'),參數的格式為YYYY-MM-DD
b.每條數據都有一個屬性, 為_id, 保證每條數據的唯一性
可以自己設置插入數據的_id值,如果沒有提供,
那么為每條數據提供了一個獨特的_id, 類型為
其中是一個12字節的16進制數:
前4個字節為當前時間戳
接下來3個字節的機器ID
接下來的2個字節中的服務進程id
最后3個字節是簡單的增量值
7.關于數據的增刪改查:
a.插入數據(增):
格式:db.集合名稱.()
示例:db.stu.({name:'gj',:1})
db.stu.({_id:"",name:'gj',:1})
注意:插入數據時, 如果不指定_id參數, 會為該數據分配一個唯一的
b.刪除數據(刪):
格式:db.集合名稱.(,{: })
參數query:可選,刪除的數據的條件
參數:可選, 如果設為true或1, 則只刪除一條, 默認false, 表示刪除多條
c.更新(改):
格式:db.集合名稱.( ,,{multi: })
參數query:查詢條件
參數:更新操作符
參數multi:可選, 默認是false,表示只更新找到的第一條記錄, 值為true表示把滿足條件的數據全部更新
示例:db.stu.({name:'hr'},{name:'mnc'})更新一條
db.stu.({name:'hr'},{$set:{name:'hys'}})更新一條
db.stu.({},{$set:{:0}},{multi:true})更新全部
d.簡單查詢(查):
格式:db.集合名稱.find()
四. 數據查詢:
1.數據查詢:
方法find(): 查詢
格式:db.集合名稱.find({條件文檔})
方法():查詢,只返回第一個
格式:db.集合名稱.({條件文檔})
方法(): 將結果格式化
格式:db.集合名稱.find({條件文檔}).()
2.比較運算符:
等于: 默認是等于判斷, 沒有運算符
小于:$lt (less than)
小于等于:$lte (less than equal)
大于:$gt ( than)
大于等于:$gte
不等于:$ne
示例:db.stu.find({age:{$gte:18}})
查詢所有年齡大于等于18的數據
3.邏輯運算符:
and:在json中寫多個條件即可
示例:查詢年齡大于或等于18, 并且性別為true的學生:
db.stu.find({age:{$gte:18},:true})
or:使用$or, 值為數組, 數組中每個元素為json
示例:查詢年齡大于18, 或性別為false的學生
db.stu.find({$or:[{age:{$gt:18}},{:false}]})
綜合示例:查詢年齡大于18或性別為男生, 并且姓名是郭靖
db.stu.find({$or:[{age:{$gte:18}},{:true}],name:'gj'})
4.范圍運算符:
使用"$in", "$nin" 判斷是否在某個范圍內
示例:查詢年齡為18、28的學生:
db.stu.find({age:{$in:[18,28]}})
5.正則表達式:
使用//或$regex編寫正則表達式
示例:查詢姓黃的學生:
db.stu.find({name:/^黃/})
db.stu.find({name:{$regex:'^黃'}})
6.limit和skip:
方法limit(): 用于讀取指定數量的數據
格式:db.集合名稱.find().limit()
示例:查詢2條學生信息:
db.stu.find().limit(2)
方法skip(): 用于跳過指定數量的數據
格式:db.集合名稱.find().skip()
示例:從第3條數據開始讀?。?/p>
db.stu.find().skip(2)
7.自定義查詢:
使用$where后面寫一個函數, 返回滿足條件的數據
示例:查詢年齡大于30的學生:
db.stu.find({
$where:() {
this.age>30;}
})
8.投影:
在查詢到的返回結果中, 只選擇必要的字段
格式:db.集合名稱.find({},{字段名稱:1,...})
參數為字段與值, 值為1表示顯示, 值為0不顯
特殊: 對于_id列默認是顯示的, 如果不顯示需要明確設置為0
示例:db.stu.find({},{_id:0,name:1,:1})
9.排序:
方法sort(),用于對集合進行排序
格式:db.集合名稱.find().sort({字段:1,...})
參數1為升序排列
參數-1為降序排列
示例:根據性別降序數據庫id的類型, 再根據年齡升序
db.stu.find().sort({:-1,age:1})
10.統計個數:
方法count()用于統計結果集中數據條數
格式:db.集合名稱.find({條件}).count()
db.集合名稱.count({條件})
示例:db.stu.find({:true}).count()
db.stu.count({age:{$gt:20},:true})
11.消除重復:
方法()對數據進行去重
格式:db.集合名稱.('去重字段',{條件})
示例:db.stu.('',{age:{$gt:18}})
五. 聚合:
1.聚合的概念:聚合()是基于數據處理的聚合管道,
每條數據通過一個由多個階段(stage)組成的管道,
可以對每個階段的管道進行分組、過濾等功能,
然后經過一系列的處理,輸出相應的結果。
2.格式:
db.集合名稱.({管道:{表達式}})
3.常用管道:
在中,數據處理完畢后, 通過管道進行下一次處理
常用管道如下:
$group: 將集合中的數據分組, 可用于統計結果
$match: 過濾數據, 只輸出符合條件的數據
$: 修改輸出數據的結構, 如重命名、 增加、 刪除字段、 創建計算結果
$sort: 將數據排序后輸出
$limit: 限制聚合管道返回的數據條數
$skip: 跳過指定數量的數據, 并返回余下的數據
$: 將數組類型的字段進行拆分
4.常用表達式:
處理輸入數據并輸出
語法:表達式:'$列名'
表達式:
$sum: 計算總和, $sum:1 表示以1倍計數
$avg: 計算平均值
$min: 獲取最小值
$max: 獲取最大值
$push: 在結果數據中插入值到一個數組中
$first: 根據資源數據的排序獲取第一個數據
$last: 根據資源數據的排序獲取最后一個數據
5.$group解析如下圖:
6.$match解析:
注意:match和find的區別在于match是管道命令,
能將結果交給后一個管道,但是find不可以
7.$解析:
8.$sort解析:
9.$limit和$skip解析:
六. 索引和備份:
1.創建索引:
意義:提高查詢速度
注意點:在默認情況下創建的索引均不是唯一索引。
示例:a.創建唯一索引:
db.t1.({"name":1},{"":true})
b.創建唯一索引并消除重復:
db.t1.({"name":1},{"":true,"":true})
c.建立聯合索引:
db.t1.({name:1,age:1})
d.查看當前集合的所有索引:
db.t1.()
e.刪除索引:
db.t1.('索引名稱')
2.數據的備份和恢復:
備份的語法:
-h -d -o
參數:-h: 服務器地址數據庫id的類型, 也可以指定端口號
-d: 需要備份的數據庫名稱
-o: 備份的數據存放位置, 此目錄中存放著備份出來的數據
恢復的語法:
-h -d --dir
參數:-h: 服務器地址
-d: 需要恢復的數據庫實例
-dir: 備份數據所在位置
七. mongo和交互:
使用模塊:pip