MongoDB的設計理念:能從服務器端轉移到驅動程序來作的事,就儘可能轉移。shell
文檔是MongoDB的核心概念。多個鍵及其關聯的值有序的放置在一塊兒即是文檔。每種編程語言表示文檔的方法不太同樣。數據庫
文檔的鍵是字符串。除了少數例外狀況。鍵能夠使用任意UTF-8字符。鍵不能含有\0(空字符),這個字符用來表示鍵的結尾;.與$有特別的意義,只有在特定環境下才能使用;如下劃線「_」開頭的鍵是保留的,雖然這個並非嚴格要求的。編程
MongoDB區分類型與大小寫。{「foo」:"3"}與{"foo":3} {"foo":3}與{"Foo":3},它們是不一樣的。數組
MongoDB不能有重複的鍵。服務器
集合就是一組文檔。若是說MongoDB中的文檔相似於關係數據庫中的行,那麼集合就如同表,多個集合能夠組成數據庫。集合是無模式的,這意味着一個集合裏面的文檔能夠是各類各樣的。咱們能夠經過名字來標識集合,集合名能夠是任意UFT-8字符串,只要知足一下條件:異步
1. 集合名不能是空字符串編程語言
2. 集合名不能含有\0字符,這個字符表示集合名的結尾函數
3. 集合名不能以"system."開頭,這是爲系統集合保留的前綴。設計
4. 用戶建立的集合名字不能含有保留字符$。有些驅動程序的確支持在集合名裏面包含$,這是由於某些系統生成的 集合中包含該字符。除非你要訪問這種建立的集合,不然千萬不要在名字裏出現$3d
多個集合能夠組成數據庫,和集合同樣數據庫也經過名字來標識,數據庫的名能夠是知足一下條件的任意UFT-8字符串:
1. 不能是空字符串
2. 不能含有''(空格)、.、$、/、\和\0(空字符)
3. 應所有小寫
5. 最多64字節
數據庫名最終會變成文件系統裏的文件,這也是如此多限制的緣由。把數據庫的名字放到集合前面,獲得就是集合的徹底限定名,稱爲命名空間。命名空間的長度不得超過121字節,在實際使用當中應小於100字節。
MongoDB默認使用27017端口.
啓動MongoDB並指定數據保存的位置 bin\mongod.exe --dbpath 數據存儲的路徑,默認保存在(c:\data\db)
插入數據
讀取數據
find會返回集合裏面全部的文檔,若只想查看一個文檔,能夠使用findOne。find與findOne能夠接受查詢文檔形式的限定條件。使用find時,shell自動顯示最多20個匹配的文檔,但能夠獲取更多文檔。
更新數據 刪除數據
mongo是MongoDB的shell客戶端,是一個內置的JavaScript解釋器,它還有一些非JavaScript語法的擴展。
有個瞭解函數功能的技巧,就是在輸入的時候不要輸入括號,這樣會顯示該函數的JavaScript源代碼,如想看find的機理或參數:
JavaScript只有在db中找不到指定的屬性時,纔會將其做爲集合返回,當屬性與目標集合同名時,能夠使用getCollection函數,要查看名稱中含有無效JavaScript字符的集合,這個函數也能夠派上用場。
ObjectId使用12字節的存儲空間,每一個字節兩位十六進制數字,是一個24位的字符串。這個長長的ObjectId是實際存儲數據的兩倍長。ObjectId的構成以下:
時間戳精確到秒級別
修改器:$set 若是指定的鍵不存在則建立它
$unset 刪除指定的鍵
$inc 增長已有鍵的值,或鍵不存在時建立一個鍵,只能做用於整數、長整數或雙精度浮點數
$ne與$addToSet 數組中有重複的數據時不會添加
$push 若是指定的鍵已經存在,會向已有的數組末尾加入一個元素,要是沒有就會建立一個新的數組
$each
$pull 會將全部匹配的部分刪掉
$pop 從數組任何一端刪除元素 {$pop:{key:1}}從數組末尾刪除 {$pop:{key:-1}}從數組頭部刪除
數組的定位修改:經過位置(從0開始)或定位操做符("$")【定位符只更新第一個匹配的元素】
upsert是一個特殊的更新,要沒有文檔符合更新條件,就會以這個條件和更新文檔爲基礎建立一個新文檔,若是找到了匹配的文檔,則正常更新。效果如圖:
save是一個shell函數,能夠在文檔不存在時插入,存在時更新,他只有一個參數:文檔。要是這個文檔含有"_id"鍵,save會調用upsert,不然會調用插入。
想要知道更新了多少個文檔,能夠運行getLastError命令
findAndModify命令中每一個鍵對應的值以下:
findAndMondify:集合名
query:查詢文檔,用來檢索文檔的條件
sort: 排序結果的條件
update:修改文檔,對找到的文檔執行更新
remove:布爾類型,表示是否刪除文檔
new:布爾類型,表示返回的是更新前的文檔仍是更新後的文檔,默認是更新前的文檔
「update」與「remove」必須有一個也只能有一個,要是匹配不到文檔,這個命令會返回一個錯誤。相比普通的更新來講,findAndMondify速度要慢一些。
MongoDB中的操做時瞬時完成的,這是由於它們都不須要等待數據庫的響應,這並非異步操做,客戶端將文檔發送給服務器後就馬上幹別的了。