1. 建立數據庫mysql
use databaseName程序員
選擇一個數據庫,若是數據庫不存在就自動建立一個數據庫sql
只有向數據庫中插入數據時,數據庫纔會被真實建立出來,而當數據庫中沒有數據時,use不會立刻建立數據庫,mongodb
這個特色有效減小了存儲空間的佔用。數據庫
2. 查看數據庫分佈式
show dbs函數
mongodb中默認有如下幾個數據庫:spa
admin 存放用戶和權限對象
local 存放本地化數據(分佈式部署)utf-8
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
1. insert方法插入數據
語法:
db.collection_name.insert({數據內容})
當向一個集合中插入數據的時候,若是這個集合不存在則自動建立
最近插入的數據文檔在數據庫的最上方顯示
插入的數據域默認是字符串,若是在插入字段中不用雙引號,數據庫後臺就會自動加上
同時插入多條文檔
db.collection_name.insert([{ }, { }, { }])
2. save方法插入文檔
db.collection_name.save()
save與insert的區別
若是加_id域,若是這個_id域的值已經存在,則會替換原有的文檔,而insert是不容許插入相同
的_id的
MongoDB刪除數據的命令比較簡單,也沒有太多的變化
語法:
db.collection.remove(query ,justOne)
參數:
query與下文查詢操做的query相同,justone表示只是刪除匹配到的多條文檔中的第一條文檔
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同樣
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)