MongoDB基礎總結

X_peng發表於2020-09-11

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()

saveinsert的區別

如果加_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 篩選條件,相當於MySQLwhere子句

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的使用

因為鍵值對無法進行像MySQLwhere子句那樣強大的篩選作用(鍵值對篩選相當於MySQLwhere子句篩選的等於條件),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:.. } } ]

gtlt一起用來把範圍括起來

 $ 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,在文件不存在條件下,則根據queryupdate插入新文件

     multi       布林值,預設為false如果query篩選的為多條,則只修改第一條,如果設定為true,則修改所有符合條件文件

 注意:

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

 

修改操作符:

$ set

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

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

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

 

相關文章