10MongoDB

一.  介紹MongoDB

1. NoSQL

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

2. 關係型與非關係型

 

 

3. 優點

1)易擴展: NoSQL數據庫種類繁多, 可是⼀個共同的特色都是去掉關係數據庫的關係型特性。 數據之間⽆關係, 這樣就⾮常容易擴展mongodb

2)⼤數據量, ⾼性能: NoSQL數據庫都具備⾮常⾼的讀寫性能, 尤爲在⼤數據量下, 一樣表現優秀。 這得益於它的⽆關係性, 數據庫的結構簡單數據庫

3)靈活的數據模型: NoSQL⽆需事先爲要存儲的數據建⽴字段, 隨時能夠存儲⾃定義的數據格式。 ⽽在關係數據庫⾥, 增刪字段是⼀件⾮常麻煩的事情。 若是是⾮常⼤數據量的表, 增長字段簡直就是⼀個噩夢json

二.  啓動

在命令行中輸入:數組

D:\MongoDB\bin\mongod --dbpath D:\MongoDB\data\db服務器

而後點擊mongo.exe輸入命令

三.  基礎命令

1.    關於database

1)      查看當前的數據庫:db

2)      查看全部的數據庫:show dbs  /show databases

3)      切換數據庫:use db_name

4)      刪除當前的數據庫:db.dropDatabase()

2.    關於集合

1)不手動建立集合:

向不存在的集合中第⼀次加⼊數據時, 集合會被建立出來

2)手動建立結合:

  • db.createCollection(name,options)
  • db.createCollection("stu")
  • db.createCollection("sub", { capped : true, size : 10 } )

參數capped: 默認值爲false表示不設置上限,值爲true表示設置上限

參數size: 當capped值爲true時, 須要指定此參數, 表示上限⼤⼩,當⽂檔達到上限時, 會將以前的數據覆蓋, 單位爲字節

3)查看集合:show collections

4)刪除集合:db.集合名稱.drop()

四.數據類型

  1. Object ID: ⽂檔ID
  2. String: 字符串, 最常⽤, 必須是有效的UTF-8
  3. Boolean: 存儲⼀個布爾值, true或false
  4. Integer: 整數能夠是32位或64位, 這取決於服務器
  5. Double: 存儲浮點值
  6. Arrays: 數組或列表, 多個值存儲到⼀個鍵
  7. Object: ⽤於嵌⼊式的⽂檔, 即⼀個值爲⼀個⽂檔
  8. Null: 存儲Null值
  9. Timestamp: 時間戳, 表示從1970-1-1到如今的總秒數
  10. Date: 存儲當前⽇期或時間的UNIX時間格式

五.注意點

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個字節是簡單的增量值

六.數據的增刪查改

1. 插入

db.集合名稱.insert(document);插⼊⽂檔時, 若是不指定_id參數, MongoDB會爲⽂檔分配⼀個惟⼀的ObjectId

2.    保存

db.集合名稱.save(document)

若是⽂檔的_id已經存在則修改, 若是⽂檔的_id不存在則添加

3.    更新

db.集合名稱.update(<query> ,<update>,{multi: <boolean>})

  • 參數query:查詢條件
  • 參數update:更新操做符
  • 參數multi:可選, 默認是false,表示只更新找到的第⼀條記錄, 值爲true表示把滿⾜條件的⽂檔所有更新

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"

4.    刪除

db.集合名稱.remove(<query>,{justOne: <boolean>})

參數query:可選,刪除的⽂檔的條件

參數justOne:可選, 若是設爲true或1, 則只刪除⼀條, 默認false, 表示刪除多條

5.    查詢

1)⽅法find(): 查詢

       db.集合名稱.find({條件⽂檔})

2)⽅法findOne():查詢,只返回第⼀個

       db.集合名稱.findOne({條件⽂檔})

3)⽅法pretty(): 將結果格式化

       db.集合名稱.find({條件⽂檔}).pretty()

七.運算符

1. 比較運算符

  • 等於: 默認是等於判斷, 沒有運算符
  • ⼩於:$lt (less than)
  • ⼩於等於:$lte (less than equal)
  • ⼤於:$gt (greater than)
  • ⼤於等於:$gte
  • 不等於:$ne

db.stu.find({age:{$gte:18}})

2.    邏輯運算符

  • and:在json中寫多個條件便可

查詢年齡⼤於或等於18, 而且性別爲true的學⽣

db.stu.find({age:{$gte:18},gender:true})

  • or:使⽤$or, 值爲數組, 數組中每一個元素爲json

查詢年齡⼤於18, 或性別爲false的學⽣

db.stu.find({$or:[{age:{$gt:18}},{gender:false}]})

查詢年齡⼤於18或性別爲男⽣, 而且姓名是郭靖

db.stu.find({$or:[{age:{$gte:18}},{gender:true}],name:'gj'})

3.    範圍運算符

使⽤"$in", "$nin" 判斷是否在某個範圍內查詢年齡爲1八、 28的學⽣

db.stu.find({age:{$in:[18,28]}})

4.    正則表達式

使⽤//或$regex編寫正則表達式查詢姓⻩的學⽣

db.stu.find({name:/^⻩/})

db.stu.find({name:{$regex:'^⻩'}})

八.limit和skip

1. limit

限制獲取數據的條數

db.集合名稱.find().limit(NUMBER)

2.    skip

跳過的數據條數

db.集合名稱.find().skip(NUMBER

九.投影

在查詢到的返回結果中, 只選擇必要的字段

  • 參數爲字段與值,值爲1表示顯示,值爲0不顯
  • 特殊: 對於_id列默認是顯示的, 若是不顯示須要明確設置爲0

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.    聚合

1)

db.collection.aggregate({$group : {_id : "$字段", num_tutorial : {$sum : 1}}})

2) 表達式

$sum: 計算總和, $sum:1 表示以⼀倍計數

$avg: 計算平均值

$min: 獲取最⼩值

$max: 獲取最⼤值

$push: 在結果⽂檔中插⼊值到⼀個數組中

$first: 根據資源⽂檔的排序獲取第⼀個⽂檔數據

$last: 根據資源⽂檔的排序獲取最後⼀個⽂檔數據

2.管道

2.1 經常使用操做

l  $project:修改輸入文檔的結構。能夠用來重命名、增長或刪除域,也能夠用於建立計算結果以及嵌套文檔。

l  $match:用於過濾數據,只輸出符合條件的文檔。$match使用MongoDB的標準查詢操做。

l  $limit:用來限制MongoDB聚合管道返回的文檔數。

l  $skip:在聚合管道中跳過指定數量的文檔,並返回餘下的文檔。

l  $unwind:將文檔中的某一個數組類型字段拆分紅多條,每條包含數組中的一個值。

l  $group:將集合中的文檔分組,可用於統計結果。

l  $sort:將輸入文檔排序後輸出。

l  $geoNear:輸出接近某一地理位置的有序文檔。

2.2   操做實例

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  建立惟一索引:

  • db.t1.ensureIndex({"name":1},{"unique":true})

l  建立惟一索引並消除重複:

  • db.t1.ensureIndex({"name":1},{"unique":true,"dropDups":true})  

2)創建聯合索引(何時須要聯合索引):

     db.t1.ensureIndex({name:1,age:1})

3)查看當前集合的全部索引:

     db.t1.getIndexes()

4)刪除索引:

     db.t1.dropIndex('索引名稱')

十三. 備份和恢復

1.    備份

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:\某某文件夾

2.    恢復

恢復語法:

     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

十四. Windows下安裝mongodb

詳情戳:

http://www.runoob.com/mongodb/mongodb-window-install.html

相關文章
相關標籤/搜索