MongoDB基礎總結

1、數據可基本操作

1. 創建資料庫

use  databaseName

選擇一個資料庫,如果資料庫不存在就自動創建一個資料庫

只有向資料庫中插入數據時,資料庫才會被真實創建出來,而當資料庫中沒有數據時,use不會馬上創建資料庫,

這個特點有效減少了存儲空間的佔用。

2. 查看資料庫

show dbs

mongodb中默認有以下幾個資料庫:

admin  存放用戶和許可權

local   存放本地化數據(分散式部署)

config  存儲分片資訊

3. 刪除資料庫

 db.dropDatabase()  

注意:mongodb中函數都用小駝峰命名

 

4. 創建集合

db.createCollection(collection_name)

5. 查看集合

show collections 或者 show tables

注意集合的命名規則:

1) 合法的utf-8字元串

2) 不能有』\0』

3) 不能以system開頭,因為是系統的保留前綴

4)不能和關鍵字重複

 

6. 刪除集合

db.collection_name.drop()

7. 集合重命名

db.collection_name.renameCollection(『new_name』)

 

8. 獲取集合對象

db.getCollection(『collection_name』)

等價於db.collection

 2、集合中增添數據

 1. insert方法插入數據

語法:

db.collection_name.insert({數據內容})

 當向一個集合中插入數據的時候,如果這個集合不存在則自動創建

 最近插入的數據文檔在資料庫的最上方顯示

 插入的數據域默認是字元串,如果在插入欄位中不用雙引號,資料庫後台就會自動加上

同時插入多條文檔

db.collection_name.insert([{ }, { }, { }])

2. save方法插入文檔

db.collection_name.save()

save與insert的區別

如果加_id域,如果這個_id域的值已經存在,則會替換原有的文檔,而insert是不允許插入相同

的_id的

3、集合中刪除數據

MongoDB刪除數據的命令比較簡單,也沒有太多的變化

語法:

db.collection.remove(query ,justOne)

參數:

query與下文查詢操作的query相同,justone表示只是刪除匹配到的多條文檔中的第一條文檔

4、集合查詢操作

1. 查詢文檔(重點)

語法:

db.collection_name.find(query,field)

相當於 mysql中的 select * 

query 篩選條件,相當於MySQL的where子句

field  選擇要展示的域

返回值: 返回查找到的文檔

需要理解的點:

query 和 field都是可選參數,不寫參數就默認顯示所有文檔,也只有查找時不用傳入query,一般其他操作都需要傳入query進行篩選

query  以鍵值對的形式給出查找條件

field   以鍵值對的形式給出要展示或者不展示的 域為鍵,值時0時不顯示該域, 值是1時顯示該域,這是mongodb特有的特性

例如:為了避免看到一大串的id值,在查找時_id 域經常會被設置為0

 db.class.find( {},{_id :0} )  除了_id 域,其他域都正常顯示

注意:

1. 在寫第二個參數時必須要寫第一個參數

2. 第二個參數只能同時限制多個域的0/1值,不能多個域都設置不同,否則其他沒設置的域會混亂,_id域的設置除外(即無論_id域怎麼設

置都不影響其他域的設置)

 query的使用

因為鍵值對無法進行像MySQL中where子句那樣強大的篩選作用(鍵值對篩選相當於MySQL中where子句篩選的等於條件),mongodb引入了操作符操作符的表達形式是以鍵值對形式出現的。下面介紹幾種常用的操作符,更多的操作符可以查看Mongodb的官方文檔。

1)比較操作符

$eq  等於操作符

例如:db.class.find( {age: {$eq : 18} },{_id :0} )

更多操作符:

    $gt   大於操作符 

    $lt   大於操作符

    $ lte  小於等於操作符

   $gte  大於等於操作符

   $ne   不等於操作符

 細節:mongodb中多種類型的數據都是可以比較的,例如數值類型,字元串類型

2)範圍操作符

$ in [ ]   在範圍集合內的文檔被匹配 (連續的範圍)

例如:db.class.find( {age: {$in : [18, 23]} },{_id :0} )

如果是用 $ and只能這樣表達: $and:[{age:{$gt:.. } }, {age:{$lt:.. } } ]

用gt和lt一起用來把範圍括起來

 $ nin[ ]  不在範圍集合內的文檔被匹配

3)邏輯操作符

1. $ and: [ ]   和運算符

query 中如果多個條件用逗號隔開,就為and關係(類似mysql中的where子句中的and)

例如:db.class.find( {$and: [{age: {$ gt 17}, {age: {$ lt 22} ],{_id :0} )  查詢年齡大於17,小於22的同學

用$ and 可以改寫為 db.class.find({$ and : [{ age: 17} ,{sex: 『M』 } ] },{_id :0} )

[ ]內一定要分成連個字典來表示兩個條件,否則(只用一個字典來包含兩個條件並用逗號分隔)在語法上就只表示一個條件,只不過這個條件裡面包含兩個條件而已

一般平常使用多直接用逗號來分隔條件而不用 $and的操作符

 

2 .$ or  或運算符

語法表達上跟 $ and 一樣,表達的是或邏輯篩選

 

1. $not  取反運算符

db.class.find( {age: {$not {$ gt 17} } },{_id :0} )  匹配年齡小於等於17的文檔

注意: $not 一般添加在條件值的前面,對值進行取反

 

2. $ nor  既不也不運算符

not(A or B) --> not A and not B

db.class.find({$ nor : [{ age: 17} ,{sex: 『M』 } ] },{_id :0} )

 注意:如果篩選匹配的文檔的域是其他文檔不具備的;即一個域有些文檔有值,有些文檔沒值,這種篩選是無法匹配的

 

2. 查詢操作的另一條語法

findOne(query,field)

查找符合條件的第一條文檔

參數跟find一樣

5、集合更新操作 

1. 修改文檔內容操作

語法:

db.collection.update(query,update,upsert,multi)

與mysql不同,mongodb所有修改操作都用update,包括對集合的域值的修改和集合結構的修改

參數:query     篩選要修改的文檔,相當於where

     update    將篩選的文檔修改為什麼內容,相當於set,需要配合修改操作符一起使用

     upsert     布爾值,默認為false,如果query文檔不存在則不進行修改  ,如果為true,在文檔不存在條件下,則根據query和update插入新文檔

     multi       布爾值,默認為false如果query篩選的為多條,則只修改第一條,如果設置為true,則修改所有符合條件文檔

 注意:

upset 一般為用默認值false,因為如果原本沒匹配的文檔,很有可能是程式設計師自己輸錯了某些內容

 

修改操作符:

$ set

如果沒有該文檔,需要插入的時候是根據查詢條件和設置條件作為域來插入的

如果需要修改的值為多個,就像插入數據一樣,將不同域的值用一個{ }包起來,例如:

db.class.update({name:'小張'},{$set:{age:16,sex:'m'}},true)