1、鏈接mongo。mysql
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]sql
mongodb:// 這是固定的格式,必需要指定。mongodb
username:password@ 可選項,若是設置,在鏈接數據庫服務器以後,驅動都會嘗試登錄這個數據庫數據庫
host1 必須的指定至少一個host, host1 是這個URI惟一要填寫的。它指定了要鏈接服務器的地址。若是要鏈接複製集,請指定多個主機地址。服務器
portX 可選的指定端口,若是不填,默認爲27017數據結構
/database 若是指定username:password@,鏈接並驗證登錄指定數據庫。若不指定,默認打開 test 數據庫。ide
?options 是鏈接選項。若是不使用/database,則前面須要加上/。全部鏈接選項都是鍵值對name=value,鍵值對之間經過&或;(分號)隔開。spa
2、關於mongo的基礎數據結構。對象
1.database 數據庫(數據庫)索引
和mysql同樣,一個mongod 中能夠有多個數據庫,默認庫爲db,單個實例能夠容納多個獨立的數據庫,每個都有本身的集合和權限,不一樣的數據庫也放置在不一樣的文件中。
(在mongodb中,系統默認還有三個具備特殊功能的庫,分別是admin 【特殊權限,用戶權限信息】,local【永遠不會被複制的庫,用來存儲本地單臺服務器的任意集合】,config【用於保存分片相關信息】)
2.collection 集合 (至關於table 表的概念)
集合也就是相似於關係型數據庫中的表格概念,集合存在於數據庫中,集合沒有固定的結構,這意味着你在對集合能夠插入不一樣格式和類型的數據,但一般狀況下咱們插入集合的數據都會有必定的關聯性。
(說的再通俗一些,集合就是表,文檔就是row,集合就是用來存數據的)
集合存在於數據庫中,一個集合的結構能夠是不固定的,也就意味着在一個集合中能夠插入不一樣格式不一樣類型的數據,可是通常狀況下,咱們插入集合的數據,都是有必定關聯性的。 下面的示例就能夠提現出集合的特色。
db.tmp.insert({"username":"aaa","phone_num":"13333333333"})
db.tmp.insert({"username":"bbb","phone_num":"1300000000","carr":"CMCC"})
db.tmp.insert({"username":"ccc","phone_num": ["13000000001","13333333331","15555555555"])
3.document 文檔 (傳統數據庫中row的概念,也就是一行記錄。)
文檔是一組鍵值(key-value)對(即BSON)。MongoDB 的文檔不須要設置相同的字段,而且相同的字段不須要相同的數據類型,這與關係型數據庫有很大的區別。
例:{"username":"ccc","phone_num": ["13000000001","13333333331","15555555555"]
檔中的鍵/值對是有序的,並且文檔中不能存在重複的key。
4.field 數據字段/域 (column)
5.index 索引
6.primary key 主鍵,MongoDB自動將_id字段設置爲主鍵
3、基礎操做:
建立數據庫:
use testdb; #建立一個名爲testdb的數據庫/切換到testdb數據庫。
show dbs; #查看當前都有哪些數據庫。
集合相關操做:
show collection #查看當前數據庫中全部的集合。
db.tmp.insert({"username":"ccc","phone_num": ["13000000001","13333333331","15555555555"])
補充!! :在mongodb3.2 版本以後,新增了兩種文檔的插入方式:
db.collection.insertOne():向指定集合中插入一條文檔數據
db.collection.insertMany():向指定集合中插入多條文檔數據
#在db數據庫中的tmp集合中插入一個文檔,文檔的內容是{"username":"ccc","phone_num":["13000000001","13333333331","15555555555"]
(在 MongoDB 中,你不須要建立集合。當你插入一些文檔時,MongoDB 會自動建立集合。)
db.tmp.drop() #刪除名爲tmp的集合。
db.tmp.find() #顯示出當前集合中全部的文檔。
db.tmp.find({"username":"aaa"}) #查詢tmp集合中username爲aaa的記錄。
#查詢基本上都是經過find來完成的,find裏面的參數就是查詢條件(關於mongodb的查詢,會在後面的文章中寫到。)
更新相關操做:
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
query : update的查詢條件,相似sql update查詢內where後面的。
update : update的對象和一些更新的操做符(如$,$inc...)等,也能夠理解爲sql update查詢內set後面的
upsert : 可選,這個參數的意思是,若是不存在update的記錄,是否插入objNew,true爲插入,默認是false,不插入。
multi : 可選,mongodb 默認是false,只更新找到的第一條記錄,若是這個參數爲true,就把按條件查出來多條記錄所有更新。
writeConcern :可選,拋出異常的級別。
示例:
db.tmp.update({'username':'aaa'},{$set:{'phone_num':'010-11111111'})
#以上語句只會修改第一條發現的文檔,若是你要修改多條相同的文檔,則須要設置 multi 參數爲 true。
db.tmp.update({'username':'aaa'},{$set:{'phone_num':'010-11111111'},{multi:true}
刪除文檔:
刪除 status 等於 A 的所有文檔:
db.inventory.deleteMany({ status : "A" })
刪除 status 等於 D 的一個文檔:
db.inventory.deleteOne( { status: "D" } )
須要注意的是:
remove() 方法 並不會真正釋放空間。
須要繼續執行 db.repairDatabase() 來回收磁盤空間。