1)「NoSQL」⼀詞最先於1998年被⽤於⼀個輕量級的關係數據庫的名字html
隨着web2.0的快速發展, NoSQL概念在2009年被提了出來程序員
2)NoSQL在2010年⻛⽣⽔起, 如今國內外衆多⼤⼩⽹站, 如facebook、 google、 淘寶、 京東、 百度等, 都在使⽤nosql開發⾼性能的產品web
3)對於⼀名程序員來說, 使⽤nosql已經成爲⼀條必備技能正則表達式
4)NoSQL最常⻅的解釋是「non-relational」, 「Not Only SQL」也被不少⼈接受, 指的是⾮關係型的數據庫sql
1)易擴展: NoSQL數據庫種類繁多, 可是⼀個共同的特色都是去掉關係數據庫的關係型特性。 數據之間⽆關係, 這樣就⾮常容易擴展mongodb
2)⼤數據量, ⾼性能: NoSQL數據庫都具備⾮常⾼的讀寫性能, 尤爲在⼤數據量下, 一樣表現優秀。 這得益於它的⽆關係性, 數據庫的結構簡單數據庫
3)靈活的數據模型: NoSQL⽆需事先爲要存儲的數據建⽴字段, 隨時能夠存儲⾃定義的數據格式。 ⽽在關係數據庫⾥, 增刪字段是⼀件⾮常麻煩的事情。 若是是⾮常⼤數據量的表, 增長字段簡直就是⼀個噩夢json
在命令行中輸入:數組
D:\MongoDB\bin\mongod --dbpath D:\MongoDB\data\db服務器
而後點擊mongo.exe輸入命令
1) 查看當前的數據庫:db
2) 查看全部的數據庫:show dbs /show databases
3) 切換數據庫:use db_name
4) 刪除當前的數據庫:db.dropDatabase()
1)不手動建立集合:
向不存在的集合中第⼀次加⼊數據時, 集合會被建立出來
2)手動建立結合:
參數capped: 默認值爲false表示不設置上限,值爲true表示設置上限
參數size: 當capped值爲true時, 須要指定此參數, 表示上限⼤⼩,當⽂檔達到上限時, 會將以前的數據覆蓋, 單位爲字節
3)查看集合:show collections
4)刪除集合:db.集合名稱.drop()
1)建立⽇期語句以下 :參數的格式爲YYYY-MM-DD
new Date('2017-12-20')
2)每一個⽂檔都有⼀個屬性, 爲_id, 保證每一個⽂檔的惟⼀性
能夠⾃⼰去設置_id插⼊⽂檔,若是沒有提供, 那麼MongoDB爲每一個⽂檔提供了⼀個獨特的_id, 類型爲objectID
3)objectID是⼀個12字節的⼗六進制數:
前4個字節爲當前時間戳
接下來3個字節的機器ID
接下來的2個字節中MongoDB的服務進程id
最後3個字節是簡單的增量值
db.集合名稱.insert(document);插⼊⽂檔時, 若是不指定_id參數, MongoDB會爲⽂檔分配⼀個惟⼀的ObjectId
db.集合名稱.save(document)
若是⽂檔的_id已經存在則修改, 若是⽂檔的_id不存在則添加
db.集合名稱.update(<query> ,<update>,{multi: <boolean>})
db.stu.update({name:'hr'},{name:'mnc'}) 更新一條
db.stu.update({name:'hr'},{$set:{name:'hys'}}) 更新一條
db.stu.update({},{$set:{gender:0}},{multi:true}) 更新所有
注意:"multi update only works with $ operators"
db.集合名稱.remove(<query>,{justOne: <boolean>})
參數query:可選,刪除的⽂檔的條件
參數justOne:可選, 若是設爲true或1, 則只刪除⼀條, 默認false, 表示刪除多條
1)⽅法find(): 查詢
db.集合名稱.find({條件⽂檔})
2)⽅法findOne():查詢,只返回第⼀個
db.集合名稱.findOne({條件⽂檔})
3)⽅法pretty(): 將結果格式化
db.集合名稱.find({條件⽂檔}).pretty()
db.stu.find({age:{$gte:18}})
查詢年齡⼤於或等於18, 而且性別爲true的學⽣
db.stu.find({age:{$gte:18},gender:true})
查詢年齡⼤於18, 或性別爲false的學⽣
db.stu.find({$or:[{age:{$gt:18}},{gender:false}]})
查詢年齡⼤於18或性別爲男⽣, 而且姓名是郭靖
db.stu.find({$or:[{age:{$gte:18}},{gender:true}],name:'gj'})
使⽤"$in", "$nin" 判斷是否在某個範圍內查詢年齡爲1八、 28的學⽣
db.stu.find({age:{$in:[18,28]}})
使⽤//或$regex編寫正則表達式查詢姓⻩的學⽣
db.stu.find({name:/^⻩/})
db.stu.find({name:{$regex:'^⻩'}})
限制獲取數據的條數
db.集合名稱.find().limit(NUMBER)
跳過的數據條數
db.集合名稱.find().skip(NUMBER
在查詢到的返回結果中, 只選擇必要的字段
db.stu.find({},{_id:0,name:1,gender:1})
1) 排序
db.collection.find({}).sort({age:1})
2)distinct
db.collection.distinct("gender",{age:{$gt:18}}) 返回數組
1)
db.collection.aggregate({$group : {_id : "$字段", num_tutorial : {$sum : 1}}})
2) 表達式
$sum: 計算總和, $sum:1 表示以⼀倍計數
$avg: 計算平均值
$min: 獲取最⼩值
$max: 獲取最⼤值
$push: 在結果⽂檔中插⼊值到⼀個數組中
$first: 根據資源⽂檔的排序獲取第⼀個⽂檔數據
$last: 根據資源⽂檔的排序獲取最後⼀個⽂檔數據
l $project:修改輸入文檔的結構。能夠用來重命名、增長或刪除域,也能夠用於建立計算結果以及嵌套文檔。
l $match:用於過濾數據,只輸出符合條件的文檔。$match使用MongoDB的標準查詢操做。
l $limit:用來限制MongoDB聚合管道返回的文檔數。
l $skip:在聚合管道中跳過指定數量的文檔,並返回餘下的文檔。
l $unwind:將文檔中的某一個數組類型字段拆分紅多條,每條包含數組中的一個值。
l $group:將集合中的文檔分組,可用於統計結果。
l $sort:將輸入文檔排序後輸出。
l $geoNear:輸出接近某一地理位置的有序文檔。
1)$project
db.article.aggregate(
{ $project : {
_id : 0 ,
title : 1 ,
author : 1
}});
默認狀況下_id字段是被包含的,若是要想不包含_id的話能夠將id置爲0
2)$match
db.articles.aggregate( [
{ $match : { score : { $gt : 70, $lte : 90 } } },
{ $group: { _id: null, count: { $sum: 1 } } }
] );
3) $skip
db.article.aggregate(
{ $skip : 5 });
4)$sort
db.collection.aggregate($sort:{age:1})
5) $unwind
db.集合名稱.aggregate({$unwind:'$字段名稱'})
1)在默認狀況下建立的索引均不是惟一索引。
l 建立惟一索引:
l 建立惟一索引並消除重複:
2)創建聯合索引(何時須要聯合索引):
db.t1.ensureIndex({name:1,age:1})
3)查看當前集合的全部索引:
db.t1.getIndexes()
4)刪除索引:
db.t1.dropIndex('索引名稱')
1) 打開mongodb服務以後,在命令提示符進入bin目錄,輸入mongodump
2)mongodump -h dbhost -d dbname -o dbdirectory
-h: 服務器地址, 也能夠指定端⼝號
-d: 須要備份的數據庫名稱
-o: 備份的數據存放位置, 此⽬錄中存放着備份出來的數據
mongodump -h 127.0.01:27017 -d test -o D:\某某文件夾
恢復語法:
mongorestore -h dbhost -d dbname --dir dbdirectory
-h: 服務器地址
-d: 須要恢復的數據庫實例
--dir: 備份數據所在位置
1) 進入bin目錄,執行mongorestore -h 127.0.0.1:27017 -d test --dir D:\...
2) mongorestore
詳情戳:
http://www.runoob.com/mongodb/mongodb-window-install.html