二:mongodb 入門詳細指南【 使用篇】

查看當前數據庫名稱:

db
  • 查看所有數據庫名稱
  • 列出所有在物理上存在的數據庫
show dbs

 

  • 數據庫的創建
  • 如果數據庫不存在,則指向數據庫,但不創建,直到插入數據或創建集合時數據庫才被創建
  • use 數據庫名稱
    
    use hanhan
    
    db.hanhan.insert({"name":"叫爸爸"})
    
    > show dbs
    admin   0.000GB
    config  0.000GB
    hanhan  0.000GB
    local   0.000GB
    pyfly   0.000GB
    test    0.000GB
    

 

數據庫刪除 :

               

  • 刪除當前指向的數據庫
  • 如果數據庫不存在,則什麼也不做
  • #db.dropDatabase()
    
    > db
    hanhan
    > db.dropDatabase()
    { "dropped" : "hanhan", "ok" : 1 }
    > db
    hanhan
    > show dbs
    admin   0.000GB
    config  0.000GB
    local   0.000GB
    pyfly   0.000GB
    test    0.000GB

集合創建: 

                       

  • 語法
db.createCollection(name, options)
  • name是要創建的集合的名稱
  • options是一個文檔,用於指定集合的配置
  • 選項​​參數是可選的,所以只需要到指定的集合名稱。以下是可以使用的選項列表:
  • 例1:不限制集合大小
  • db.createCollection("stu")

 

  • 例2:限制集合大小,後面學會插入語句後可以查看效果
  • 參數capped:默認值爲false表示不設置上限,值爲true表示設置上限
  • 參數size:當capped值爲true時,需要指定此參數,表示上限大小,當文檔達到上限時,會將之前的數據覆蓋,單位爲字節
db.createCollection("sub", { capped : true, size : 10 } )

 查看當前數據庫的集合

  • 語法
> show collections
stu
sub

 

刪除

  • 語法
> db.stu.drop()
true
>


 

數據類型

  • 下表爲MongoDB中常用的幾種數據類型:
  • Object ID:文檔ID
  • String:字符串,最常用,必須是有效的UTF-8
  • Boolean:存儲一個布爾值,true或false
  • Integer:整數可以是32位或64位,這取決於服務器
  • Double:存儲浮點值
  • Arrays:數組或列表,多個值存儲到一個鍵
  • Object:用於嵌入式的文檔,即一個值爲一個文檔
  • Null:存儲Null值
  • Timestamp:時間戳
  • Date:存儲當前日期或時間的UNIX時間格式

object id

  • 每個文檔都有一個屬性,爲_id,保證每個文檔的唯一性
  • 可以自己去設置_id插入文檔
  • 如果沒有提供,那麼MongoDB爲每個文檔提供了一個獨特的_id,類型爲objectID
  • objectID是一個12字節的十六進制數
    • 前4個字節爲當前時間戳
    • 接下來3個字節的機器ID
    • 接下來的2個字節中MongoDB的服務進程id
    • 最後3個字節是簡單的增量值

 

 

插入

  • 語法
db.集合名稱.insert(document)
  • 插入文檔時,如果不指定_id參數,MongoDB會爲文檔分配一個唯一的ObjectId
  • 例1
db.stu.insert({name:'gj',gender:1})
  • 例2
s1={_id:'20160101',name:'hr'}
s1.gender=0
db.stu.insert(s1)

簡單查詢

 

  • 語法
db.集合名稱.find()

更新

  • 語法
db.集合名稱.update(
   <query>,
   <update>,
   {multi: <boolean>}
)
  • 參數query:查詢條件,類似sql語句update中where部分
  • 參數update:更新操作符,類似sql語句update中set部分
  • 參數multi:可選,默認是false,表示只更新找到的第一條記錄,值爲true表示把滿足條件的文檔全部更新
  • 例3:全文檔更新
    db.stu.update({name:'hr'},{name:'mnc'})

 

  • 例4:指定屬性更新,通過操作符$set
db.stu.insert({name:'hr',gender:0})
db.stu.update({name:'hr'},{$set:{name:'hys'}})
  • 例5:修改多條匹配到的數據
db.stu.update({},{$set:{gender:0}},{multi:true})

保存

  • 語法
db.集合名稱.save(document)
  • 如果文檔的_id已經存在則修改,如果文檔的_id不存在則添加

  • 例6

db.stu.save({_id:'20160102','name':'yk',gender:1})
  • 例7
db.stu.save({_id:'20160102','name':'wyk'})

刪除

  • 語法
db.集合名稱.remove(
   <query>,
   {
     justOne: <boolean>
   }
)
  • 參數query:可選,刪除的文檔的條件
  • 參數justOne:可選,如果設爲true或1,則只刪除一條,默認false,表示刪除多條
  • 例8:只刪除匹配到的第一條
db.stu.remove({gender:0},{justOne:true})
  • 例9:全部刪除
db.stu.remove({})

 

數據查詢

基本查詢

  • 方法find():查詢
db.集合名稱.find({條件文檔})
  • 方法findOne():查詢,只返回第一個
db.集合名稱.findOne({條件文檔})
  • 方法pretty():將結果格式化
db.集合名稱.find({條件文檔}).pretty()

比較運算符

  • 等於,默認是等於判斷,沒有運算符
  • 小於$lt
  • 小於或等於$lte
  • 大於$gt
  • 大於或等於$gte
  • 不等於$ne
  • 例1:查詢名稱等於'gj'的學生
db.stu.find({name:'gj'})
  • 例2:查詢年齡大於或等於18的學生
db.stu.find({age:{$gte:18}})

邏輯運算符

  • 查詢時可以有多個條件,多個條件之間需要通過邏輯運算符連接
  • 邏輯與:默認是邏輯與的關係
  • 例3:查詢年齡大於或等於18,並且性別爲1的學生
db.stu.find({age:{$gte:18},gender:1})
  • 邏輯或:使用$or
  • 例4:查詢年齡大於18,或性別爲0的學生
db.stu.find({$or:[{age:{$gt:18}},{gender:1}]})
  • and和or一起使用
  • 例5:查詢年齡大於18或性別爲1的學生,並且學生的姓名爲gj
db.stu.find({$or:[{age:{$gte:18}},{gender:1}],name:'gj'})

範圍運算符

  • 使用"$in","$nin" 判斷是否在某個範圍內
  • 例6:查詢年齡爲18、28的學生
db.stu.find({age:{$in:[18,28]}})

支持正則表達式

  • 使用//或$regex編寫正則表達式
  • 例7:查詢姓黃的學生
db.stu.find({name:/^黃/})

自定義查詢

  • 使用$where後面寫一個函數,返回滿足條件的數據
  • 例7:查詢年齡大於30的學生
db.stu.find({$where:function(){return this.age>16}})

 

Limit

  • 方法limit():用於讀取指定數量的文檔
  • 語法:
db.集合名稱.find().limit(NUMBER)
  • 參數NUMBER表示要獲取文檔的條數
  • 如果沒有指定參數則顯示集合中的所有文檔
  • 例1:查詢2條學生信息
db.stu.find().limit(2)

skip

  • 方法skip():用於跳過指定數量的文檔
  • 語法:
db.集合名稱.find().skip(NUMBER)
  • 參數NUMBER表示跳過的記錄條數,默認值爲0
  • 例2:查詢從第3條開始的學生信息
db.stu.find().skip(2)

一起使用

  • 方法limit()和skip()可以一起使用,不分先後順序

  • 創建數據集

for(i=0;i<15;i++){db.t1.insert({_id:i})}
  • 查詢第5至8條數據
db.stu.find().limit(4).skip(5)
或
db.stu.find().skip(5).limit(4)

 

投影

  • 在查詢到的返回結果中,只選擇必要的字段,而不是選擇一個文檔的整個字段
  • 如:一個文檔有5個字段,需要顯示只有3個,投影其中3個字段即可
  • 語法:
  • 參數爲字段與值,值爲1表示顯示,值爲0不顯示
db.集合名稱.find({},{字段名稱:1,...})
  • 對於需要顯示的字段,設置爲1即可,不設置即爲不顯示
  • 特殊:對於_id列默認是顯示的,如果不顯示需要明確設置爲0
  • 例1
db.stu.find({},{name:1,gender:1})
  • 例2
db.stu.find({},{_id:0,name:1,gender:1})

 

排序

  • 方法sort(),用於對結果集進行排序
  • 語法
db.集合名稱.find().sort({字段:1,...})
  • 參數1爲升序排列
  • 參數-1爲降序排列
  • 例1:根據性別降序,再根據年齡升序
db.stu.find().sort({gender:-1,age:1})

 

統計個數

  • 方法count()用於統計結果集中文檔條數
  • 語法
db.集合名稱.find({條件}).count()
  • 也可以與爲
db.集合名稱.count({條件})
  • 例1:統計男生人數
db.stu.find({gender:1}).count()
  • 例2:統計年齡大於20的男生人數
db.stu.count({age:{$gt:20},gender:1})

 

消除重複

  • 方法distinct()對數據進行去重
  • 語法
db.集合名稱.distinct('去重字段',{條件})
  • 例1:查找年齡大於18的性別(去重)
db.stu.distinct('gender',{age:{$gt:18}})

 

 

 

初級內容在這裏就結束了後面會寫跟python 的結合使用。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章