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)