MongoDB理論知識+MongoDB安裝與啓動+使用MongoDB常用命令

本篇博客講帶大家瞭解MongoDB的理論知識,然後進行window系統MongoDB安裝,Docker 環境下MongoDB安裝。

什麼是MongoDB

MongoDB 是由C++語言編寫的,是一個基於分佈式文件存儲的開源數據庫系統。

​MongoDB 同時也可以說是一個跨平臺的,面向文檔的數據庫,是當前 NoSQL 數據庫產品中最熱門的一種。它介於關係數據庫和非關係數據庫之間,是非關係數據庫當中功能最豐富,最像關係數據庫的產品。它支持的數據結構非常鬆散,是類似 JSON 的 BSON 格式,因此可以存儲比較複雜的數據類型。

在高負載的情況下,添加更多的節點,可以保證服務器性能。

MongoDB 旨在爲WEB應用提供可擴展的高性能數據存儲解決方案。

MongoDB 將數據存儲爲一個文檔,數據結構由鍵值(key=>value)對組成。MongoDB 文檔類似於 JSON 對象。字段值可以包含其他文檔,數組及文檔數組。

​MongoDB 的官方網站地址是:http://www.mongodb.org/

MongoDB特點

​MongoDB 最大的特點是他支持的查詢語言非常強大,其語法有點類似於面向對象的查詢語言,幾乎可以實現類似關係數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引。它是一個面向集合的,模式自由的文檔型數據庫。具體特點總結如下:

(1)面向集合存儲,易於存儲對象類型的數據

(2)模式自由

(3)支持動態查詢

(4)支持完全索引,包含內部對象

(5)支持複製和故障恢復

(6)使用高效的二進制數據存儲,包括大型對象(如視頻等)

(7)自動處理碎片,以支持雲計算層次的擴展性

(8)支持 Python,PHP,Ruby,Java,C,C#,Javascript,Perl 及 C++語言的驅動程序,
社區中也提供了對 Erlang 及.NET 等平臺的驅動程序

(9) 文件存儲格式爲 BSON(一種 JSON 的擴展)

MongoDB體系結構

MongoDB的邏輯結構是一種層次結構。主要由:

文檔(document)、集合(collection)、數據庫(database)這三部分組成的。邏輯結構是面向用戶的,用戶使用 MongoDB 開發應用程序使用的就是邏輯結構。

(1)MongoDB 的文檔(document),相當於關係數據庫中的一行記錄。

(2)多個文檔組成一個集合(collection),相當於關係數據庫的表。

(3)多個集合(collection),邏輯上組織在一起,就是數據庫(database)。

(4)一個 MongoDB 實例支持多個數據庫(database)。

文檔(document)、集合(collection)、數據庫(database)的層次結構如下圖:

在這裏插入圖片描述
下表是MongoDB與MySQL數據庫邏輯結構概念的對比
在這裏插入圖片描述

MongoDB數據類型

基本數據類型

null:用於表示空值或者不存在的字段,{“x”:null}

布爾型:布爾類型有兩個值true和false,{“x”:true}

數值:shell默認使用64爲浮點型數值。{“x”:3.14}或{“x”:3}。對於整型值,可以使用NumberInt(4字節符號整數)或NumberLong(8字節符號整數), {“x”:NumberInt(“3”)}{“x”:NumberLong(“3”)}

字符串:UTF-8字符串都可以表示爲字符串類型的數據,{“x”:“呵呵”}

日期:日期被存儲爲自新紀元依賴經過的毫秒數,不存儲時區,{“x”:new Date()}

正則表達式:查詢時,使用正則表達式作爲限定條件,語法與JavaScript的正則表達式相同,{“x”: /[abc]/}

數組:數據列表或數據集可以表示爲數組,{“x”: [“a“,“b”,”c”]}

內嵌文檔:文檔可以嵌套其他文檔,被嵌套的文檔作爲值來處理,{“x”:{“y”:3 }} 對象Id:對象id是一個12字節的字符串,是文檔的唯一標識,{“x”: objectId() }

二進制數據:二進制數據是一個任意字節的字符串。它不能直接在shell中使用。如果要將非utf-字符保存到數據庫中,二進制數據是唯一的方式。

代碼:查詢和文檔中可以包括任何JavaScript代碼,{“x”:function(){/…/}}

什麼樣的功能適合使用MongoDB

吐槽和評論兩項功能存在以下特點:

(1)數據量大

(2)寫入操作頻繁

(3)價值較低

對於這樣的數據,我們更適合使用MongoDB來實現數據的存儲

MongoDB安裝與啓動

window系統MongoDB安裝

雙擊"mongodb-win32-x86_64-2008plus-ssl-3.2.10-signed.msi” 按照提示步驟安裝即可。安裝完成後,軟件會安裝在C:\Program Files\MongoDB 目錄中。

我們要啓動的服務程序就是C:\Program Files\MongoDB\Server\3.2\bin目錄下的mongod.exe,爲了方便我們每次啓動,我將C:\Program Files\MongoDB\Server\3.2\bin 設置到環境變量path中。

啓動

(1)首先打開命令提示符,創建一個用於存放數據的目錄

md d:\data

(2)啓動服務

mongod ‐‐dbpath=d:\data(data文件的路徑)

我們在啓動信息中可以看到,mongoDB的默認端口是27017

如果我們想改變默認的啓動端口,可以通過–port來指定端口

在命令提示符輸入以下命令即可完成登陸

mongo

退出mongodb

exit

Docker 環境下MongoDB安裝

在宿主機創建mongo容器

docker run --name mongodb -p 27017:27017 -d mongo

在這裏插入圖片描述
遠程登陸

在bin目錄下打開cmd,輸入命令

mongo 192.168.184.134

在這裏插入圖片描述

MongoDB常用命令

選擇和創建數據庫的語法格式:use 數據庫名稱

如果數據庫不存在則自動創建

以下語句創建student數據庫

use student

插入文檔的語法格式:db.集合名稱.insert(數據)

以下語句插入文檔數據

db.student.insert({"_id":1,"name":"宋政宏","sex":"男","age":25,"introduce":"帥哥"})

查詢集合的語法格式:db.集合名稱.find()

如果我們要查詢student集合的所有文檔,我們輸入以下命令:

db.spit.find()

這裏你會發現每條文檔會有一個叫_id的字段,這個相當於我們原來關係數據庫中表的主鍵,當你在插入文檔記錄時沒有指定該字段,MongoDB會自動創建,其類型是ObjectID類型。如果我們在插入文檔記錄時指定該字段也可以,其類型可以是ObjectID類型,也可以是MongoDB支持的任意類型。

上述操作如圖:
在這裏插入圖片描述
輸入以下測試語句:

db.student.insert({"_id":2,"name":"吳語","sex":"男","age":23,"introduce":"中庸"})
db.student.insert({"_id":3,"name":"華楠","sex":"女","age":21,"introduce":"女神"})
db.student.insert({"_id":4,"name":"山蒲","sex":"男","age":24,"introduce":"小胖"})
db.student.insert({"_id":5,"name":"穆斯","sex":"男","age":26,"introduce":"男神"})

如果我想按一定條件來查詢,比如我想查詢age爲25的記錄,怎麼辦?很簡單!只要在find()中添加參數即可,參數也是json格式,如下:

db.student.find({"age":25})

如果你只需要返回符合條件的第一條數據,我們可以使用findOne命令來實現

db.student.findOne({"age":25})

如果你想返回指定條數的記錄,可以在find方法後調用limit來返回結果,例如:

db.student.find().limit(3)

修改文檔的語法結構:db.集合名稱.update(條件,修改後的數據)

如果我們想修改_id爲1的記錄,年齡爲26,輸入以下語句:

db.student.update({_id:"1"},{"age":NumberInt(26)})

執行後,我們會發現,這條文檔除了age字段其它字段都不見了,爲了解決這個問題,我們需要使用修改器$set來實現,命令如下:

db.student.update({_id:"2"},{$set:{"age":NumberInt(26)}})

刪除文檔的語法結構:db.集合名稱.remove(條件)

以下語句可以將數據全部刪除,請慎用

db.student.remove({})

如果刪除"age"=26的記錄,輸入以下語句

db.student.remove({"age":26})

統計記錄條件使用count()方法。以下語句統計student集合的記錄數

db.student.count()

如果按條件統計 ,例如:統計age爲26的記錄條數

db.student.count({"age":26})

MongoDB的模糊查詢是通過正則表達式的方式實現的。格式爲:/模糊查詢字符串/

例如,我要查詢姓名中帶有"宋"的所有文檔,代碼如下

db.student.find({"name":/政/})

如果要查詢姓名中"宋"開頭的,代碼如下:

db.student.find({"name":/^宋/})

大於 小於 不等於
<, <=, >, >= 這個操作符也是很常用的,格式如下:

db.集合名稱.find({ "field" : { $gt: value }}) // 大於: field > value

db.集合名稱.find({ "field" : { $lt: value }}) // 小於: field < value

db.集合名稱.find({ "field" : { $gte: value }}) // 大於等於: field >= value

db.集合名稱.find({ "field" : { $lte: value }}) // 小於等於: field <= value

db.集合名稱.find({ "field" : { $ne: value }}) // 不等於: field != value

示例:查詢年齡大於25的記錄

db.student.find({"age":{$gt:25}})

包含與不包含

包含使用$in操作符。
示例:查詢age字段包含25,26的文檔

db.student.find({"age":{$in:[25,26]}})

不包含使用$nin操作符。
示例:查詢age字段不包含25,26的文檔

db.student.find({"age":{$nin:[25,26]}})

條件連接

我們如果需要查詢同時滿足兩個以上條件,需要使用 $ and操作符將條件進行關聯。(相當於SQL的and)
格式爲:$and:[ { },{ },{ } ]
示例:查詢age大於23且小於26的文檔

db.student.find({$and:[ {"age":{$gte:23}} ,{"age":{$lt:26} }]})

如果兩個以上條件之間是或者的關係,我們使用or操作符進行關聯,與前面and的使用方式相同
格式爲:$or:[ { },{ },{ } ]
示例:查詢sex爲"男",或者age小於25的文檔記錄

db.student.find({$or:[ {"sex":"男"} ,{"age":{$lt:25} }]})

列值增長
如果我們想實現對某列值在原有值的基礎上進行增加或減少,可以使用$inc運算符來實現

db.student.update({_id:"2"},{$inc:{"age":NumberInt(1)}}	)

其實列值增長跟點贊功能更配

發佈了41 篇原創文章 · 獲贊 136 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章