Mongodb是近年來很火的一個非關係型資料庫,不少企業都用來做部分業務模塊數據的擴展存儲,這裡我 總結了一些Mongodb的基本使用,作為分享,也方便自己以後需要的時候查詢使用。 1. 創建資料庫 use databaseName 選擇一個資料庫,如果資料庫不存在就自動創建一個資料庫 只有向資料庫 ...
Mongodb是近年來很火的一個非關係型資料庫,不少企業都用來做部分業務模塊數據的擴展存儲,這裡我
總結了一些Mongodb的基本使用,作為分享,也方便自己以後需要的時候查詢使用。
1. 創建資料庫
use databaseName
選擇一個資料庫,如果資料庫不存在就自動創建一個資料庫
只有向資料庫中插入數據時,資料庫才會被真實創建出來,而當資料庫中沒有數據時,use不會馬上創建資料庫,
這個特點有效減少了存儲空間的占用。
2. 查看資料庫
show dbs
mongodb中預設有以下幾個資料庫:
admin 存放用戶和許可權
local 存放本地化數據(分散式部署)
config 存儲分片信息
3. 刪除資料庫
db.dropDatabase()
註意:mongodb中函數都用小駝峰命名
4. 創建集合
db.createCollection(collection_name)
5. 插入數據
db.collection_name.insert({數據內容})
當向一個集合中插入數據的時候,如果這個集合不存在則自動創建
最近插入的數據文檔在資料庫的最上方顯示
插入的數據域預設是字元串,如果在插入欄位中不用雙引號,資料庫後臺就會自動加上
插入多條文檔
db.collection_name.insert([{ }, { }, { }])
6. save插入文檔方式
db.collection_name.save()
save與insert的區別
如果加_id域,如果這個_id域的值已經存在,則會替換原有的文檔,而insert是不允許插入相同
的_id的
7. 查看集合
show collections 或者 show tables
註意集合的命名規則:
1) 合法的utf-8字元串
2) 不能有’\0’
3) 不能以system開頭,因為是系統的保留首碼
4)不能和關鍵字重覆
8. 刪除集合
db.collection_name.drop()
9. 集合重命名
db.collection_name.renameCollection(‘new_name’)
10. 查詢文檔(重點)
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} )
註意:如果篩選匹配的文檔的域是其他文檔不具備的;即一個域有些文檔有值,有些文檔沒值,這種篩選是無法匹配的
11. findOne(query,field)
查找符合條件的第一條文檔
參數跟find一樣
12.獲取集合對象
db.getCollection(‘collection_name’)
等價於db.collection
13. 文檔的刪除操作
db.collection.remove(query ,justOne)
14. 修改文檔內容操作
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)