一、連接mongo。
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
mongodb:// 這是固定的格式,必須要指定。
username:password@ 可選項,如果設置,在連接數據庫服務器之後,驅動都會嘗試登陸這個數據庫
host1 必須的指定至少一個host, host1 是這個URI唯一要填寫的。它指定了要連接服務器的地址。如果要連接複製集,請指定多個主機地址。
portX 可選的指定端口,如果不填,默認爲27017
/database 如果指定username:password@,連接並驗證登陸指定數據庫。若不指定,默認打開 test 數據庫。
?options 是連接選項。如果不使用/database,則前面需要加上/。所有連接選項都是鍵值對name=value,鍵值對之間通過&或;(分號)隔開。
二、關於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字段設置爲主鍵
三、基礎操作:
創建數據庫:
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() 來回收磁盤空間。