2.關於mongodb的基礎操作

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








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章