2.關於mongodb的基礎操做

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() 來回收磁盤空間。

相關文章
相關標籤/搜索