Windows 安装 MongoDB 和 可视化工具Robo3T
MongoDB 官網下載地址:https://www.mongodb.com/try/download/community
MongoDB 是一款非常熱門的 NoSQL 面向文檔的數據庫管理系統, 分為 企業版收費版 和 社區免費版。MongoDB 使用 BSON 對象來存儲,與 JSON 格式類型的 "鍵 - 值" 對( key / value )類似,MongoDB 數據庫和關系型DB的存儲模型對應關系:
NoSQL 數據庫的理論基礎是CAP 理論,分別代表?
- Consistency(強一致性)。系統在執行某項操作后仍然處于一致的狀態。在分布式系統中,更新操作執行成功之后,所有的用戶都能讀取到最新的值,這樣的系統被認為具有強一致性。
- Availability(可用性)。A:用戶執行的操作在一定時間內,必須返回結果。如果超時,那么操作回滾,跟操作沒有發生一樣。
- Partition Tolerance(分區容錯)。分布式系統是由多個分區節點組成的,每個分區節點都是一個獨立的Server,P屬性表明系統能夠處理分區節點的動態加入和離開。
分布式數據系統只能滿足其中兩個特性。
在構建分布式系統時,必須考慮CAP特性。傳統的關系型DB,注重的是CA特性,數據一般存儲在一臺Server上。而處理海量數據的分布式存儲和處理系統更注重AP,AP的優先級要高于C,但NoSQL并不是完全放棄一致性(Consistency),NoSQL保留數據的最終一致性(Eventually Consistency)。最終一致性是指更新操作完成之后,用戶最終會讀取到數據更新之后的值,但是會存在一定的時間窗口,用戶仍會讀取到更新之前的舊數據;在一定的時間延遲之后,數據達到一致性。
一、安裝、
官網安裝文檔:https://docs.mongodb.com/manual/tutorial/install-mongodb-on-windows/
在 Windows 中,默認的安裝文件存儲目錄是:C:\Program Files\MongoDB\Server\4.4\bin,點擊 Windows+R,輸入 cmd,啟動 Command Prompt,進入到安裝目錄:
安裝完之后,如果不想每次啟動都進入到 bin 目錄下,可以設置 環境變量
每次打開 Command Prompt 都需要進入到 MongoDB 的安裝目錄十分麻煩,可以修改系統環境變量,在 Path 變量的字符串后面追加 ";;C:\Program Files\MongoDB\Server\4.4\bin;;",注意兩個Path之間以 英文的分號 ";"?分割。
linux 安裝后的配置
:https://www.cnblogs.com/jasonLiu2018/p/13088971.html
添加用戶名和密碼:
終端輸入mongo,首先添加管理用戶,
show dbs // 顯示所有的數據庫 use admin // 切換到admin db.createUser({user:'root',pwd:'root',roles:['userAdminAnyDatabase']}) db.auth('root','root')再切換數據庫,添加用戶,
use test db.createUser({user:'root',pwd:'root',roles:['readWrite']})二、簡單實用
1,啟動 MongoDB 實例
環境變量設置成功之后,在C盤中創建一個文件夾data,用于存儲 MongoDB 的數據庫文件。然后,打開一個命令行工具,輸入mongod 啟動 MongoDB 實例,默認監聽的 TCP 端口是 27017 。
mongodwindows10 無法啟動Mongo解決方法:https://blog.csdn.net/qq_20084101/article/details/82261195
C:\Program Files\MongoDB\Server\4.4\bin>?mongod.exe -f mongod.cfg
MongoDB 同時啟動一個 HTTP 服務器,監聽 27017 端口,如果 MongoDB 實例安裝在本地,那么在瀏覽器中輸入:http://127.0.0.1:27017/? 會顯示下面一行英文:
It looks like you are trying to access MongoDB over HTTP on the native driver port.
mongod?是整個 MongoDB 最核心的進程,負責數據庫的創建,刪除等管理操作,運行在服務器端,監聽客戶端的請求,提供數據服務。
2,鏈接到 MongoDB 實例
不要關閉 MongoDB 實例,新打開一個命令行工具,輸入 mongo ,該命令啟動 mongo shell,shell 將自動連接本地 (localhost) 的 MongoDB 實例,默認的端口是 27017:
命令:mongo
mongo 進程是構造一個Javascript?Shell,用于跟 mongod 進程交互,根據 mongod 提供的接口對MongoDB 數據庫進行管理,相當于 SSMS(SQL Server Management Studio),是一個管理MongoDB 的工具。
3,查看當前連接的 DB
使用命令查看正在連接的數據庫名字
db db.getName()4,查看 MongoDB 實例中的 db 和 collection
show dbsshow collections db.getCollectionNames()5,切換 db
use foo6,db 中創建 users 集合,并向集合中插入一條 document
use foo db.users.insert({"name":"name 1",age:21}) db.users.find()7,關閉 MongoDB 實例
在 mongo shell中,執行以下命令,關閉 MongoDB 實例
use admin db.shutdownServer()8,幫助命令
help- db.help() :查看數據庫級別的幫助
- db.mycoll.help() :查看集合級別的幫助
三、mongod 命令常用參數
1,常用參數
mongod 是 MongoDB 系統的主要守護進程,用于處理數據請求,數據訪問和執行后臺管理操作,必須啟動,才能訪問 MongoDB 數據庫。
在啟動 mongod 時,常用的參數是:
- --dbpath :存儲MongoDB數據文件的目錄
- --directoryperdb:指定每個數據庫單獨存儲在一個目錄中(directory),該目錄位于--dbpath指定的目錄下,每一個子目錄都對應一個數據庫名字。Uses a separate directory to store data for each database. The directories are under the --dbpath directory, and each subdirectory name corresponds to the database name.
- --logpath :指定mongod記錄日志的文件
- --fork:以后臺deamon形式運行服務
- --journal:開始日志功能,通過保存操作日志來降低單機故障的恢復時間
- --config(或-f):配置文件,用于指定runtime options
- --bind_ip :指定對外服務的綁定IP地址
- --port :對外服務窗口
- --auth:啟用驗證,驗證用戶權限控制
- --syncdelay:系統刷新disk的時間,單位是second,默認是60s
- --replSet :以副本集方式啟動mongod,副本集的標識是setname
2,MongoDB 的啟動方式
? ? 2.1 以命令方式啟動,默認的 dbpath是 C:\data\db
mongod --dbpath=C:\data\db? ? 2.2 以配置文檔的方式啟動
將 mongod 的命令參數寫入配置文檔,以參數 -f 啟動
mongod -f C:\data\db\mongodb_config.config? ? 2.3 以 daemon 方式啟動
當啟動 MongoDB 的進程關閉后,MongoDB 隨之關閉,只需要使用 --fork 參數,就能使 MongoDB以后臺守護進程方式啟動。
mongod -fork3,查看 mongod 的啟動參數
db.serverCmdLineOpts()四、mongo 命令常用參數
mongo 是一個交互式的 js shell,提供了一個強大的 js 環境,為 DBA 管理 MongoDB,developer查詢 MongoDB 數據提供接口。通過 mongo shell 和 MongoDB 進行交互,查詢和修改 MongoDB 數據庫,管理 MongoDB 數據庫,維護 MongoDB 的副本集和分片集群,是一個非常強大的工具。
在啟動 mongo shell時,常用的參數是:
- --nodb:?阻止 mongo 在啟動時連接到數據庫實例;
- --port ?:指定 mongo 連接到 mongod 監聽的TCP端口,默認的端口值是 27017;
- --host ?:指定 mongod 運行的 server,如果沒有指定該參數,那么 mongo 嘗試連接運行在本地(localhost)的 mongod 實例;
- :指定 mongo 連接的數據庫
- --username/-u 和?--password/-p :指定訪問 MongoDB 數據庫的賬戶和密碼,只有當認證通過后,用戶才能訪問數據庫;
- --authenticationDatabase :指定創建 User 的數據庫,在哪個數據庫中創建 User時,該數據庫就是 User 的 Authentication Database;
五、MongoDB 的可視化工具
? ? 1,推薦?Robomongo
? ? ? ? Robomongo 是開源,免費的MongoDB管理工具,之前叫 Robomongo,后面被收購了,改名 Robo 3T 。下載地址:https://robomongo.org
? ? 2,MongoBooster
? ? ? ? 支持MongoDB 3.2 版本,個人使用免費,用于商業收費,下載地址:MongoBooster下載
六,學習 MongoDB
? ? 1,推薦學習 MongoDB 書籍。動物書《MongoDB權威指南-第二版》,非常經典
? ? 2,學習 MongoDB 的官方手冊:?MongoDB Manual
? ? 3,學習 MongoDB 的入門教程:MongoDB Tutorial
參考文檔:
- mongod:https://docs.mongodb.com/manual/reference/program/mongod/#bin.mongod
- mongo:https://docs.mongodb.com/manual/reference/program/mongo/
MongoDB?概念解析
菜鳥教程:http://www.runoob.com/mongodb/mongodb-databases-documents-collections.html
不管我們學習什么數據庫都應該學習其中的基礎概念,在mongodb中基本的概念是文檔、集合、數據庫,下面我們挨個介紹。
下表將幫助您更容易理解Mongo中的一些概念:
| database | database | 數據庫 |
| table | collection | 數據庫表/集合 |
| row | document | 數據記錄行/文檔 |
| column | field | 數據字段/域 |
| index | index | 索引 |
| table joins | 表連接,MongoDB不支持 | |
| primary key | primary key | 主鍵,MongoDB自動將_id字段設置為主鍵 |
通過下圖實例,我們也可以更直觀的了解Mongo中的一些概念:
數據庫
一個mongodb中可以建立多個數據庫。
MongoDB的默認數據庫為"db",該數據庫存儲在data目錄中。
MongoDB的單個實例可以容納多個獨立的數據庫,每一個都有自己的集合和權限,不同的數據庫也放置在不同的文件中。
"show dbs"?命令可以顯示所有數據的列表。
$ ./mongo MongoDB shell version: 3.0.6 connecting to: test > show dbs local 0.078GB test 0.078GB > ./mongo MongoDB shell version: 3.0.6 connecting to: test > show dbs local 0.078GB test 0.078GB >執行?"db"?命令可以顯示當前數據庫對象或集合。
$ ./mongo MongoDB shell version: 3.0.6 connecting to: test > db test > ./mongo MongoDB shell version: 3.0.6 connecting to: test > db test >運行"use"命令,可以連接到一個指定的數據庫。
> use local switched to db local > db local > use local switched to db local > db local >以上實例命令中,"local" 是你要鏈接的數據庫。
在下一個章節我們將詳細講解MongoDB中命令的使用。
數據庫也通過名字來標識。數據庫名可以是滿足以下條件的任意UTF-8字符串。
- 不能是空字符串("")。
- 不得含有' '(空格)、.、$、/、\和\0 (空字符)。
- 應全部小寫。
- 最多64字節。
有一些數據庫名是保留的,可以直接訪問這些有特殊作用的數據庫。
- admin: 從權限的角度來看,這是"root"數據庫。要是將一個用戶添加到這個數據庫,這個用戶自動繼承所有數據庫的權限。一些特定的服務器端命令也只能從這個數據庫運行,比如列出所有的數據庫或者關閉服務器。
- local:?這個數據永遠不會被復制,可以用來存儲限于本地單臺服務器的任意集合
- config: 當Mongo用于分片設置時,config數據庫在內部使用,用于保存分片的相關信息。
文檔
文檔是一組鍵值(key-value)對(即BSON)。MongoDB 的文檔不需要設置相同的字段,并且相同的字段不需要相同的數據類型,這與關系型數據庫有很大的區別,也是 MongoDB 非常突出的特點。
一個簡單的文檔例子如下:
{"site":"www.runoob.com", "name":"菜鳥教程"}"site":"www.runoob.com", "name":"菜鳥教程"}下表列出了 RDBMS 與 MongoDB 對應的術語:
| 數據庫 | 數據庫 |
| 表格 | 集合 |
| 行 | 文檔 |
| 列 | 字段 |
| 表聯合 | 嵌入文檔 |
| 主鍵 | 主鍵 (MongoDB 提供了 key 為 _id ) |
| Mysqld/Oracle | mongod |
| mysql/sqlplus | mongo |
需要注意的是:
文檔鍵命名規范:
- 鍵不能含有\0 (空字符)。這個字符用來表示鍵的結尾。
- .和$有特別的意義,只有在特定環境下才能使用。
- 以下劃線"_"開頭的鍵是保留的(不是嚴格要求的)。
集合
集合就是 MongoDB 文檔組,類似于 RDBMS (關系數據庫管理系統:Relational Database Management System)中的表格。
集合存在于數據庫中,集合沒有固定的結構,這意味著你在對集合可以插入不同格式和類型的數據,但通常情況下我們插入集合的數據都會有一定的關聯性。
比如,我們可以將以下不同數據結構的文檔插入到集合中:
{"site":"www.baidu.com"} {"site":"www.google.com","name":"Google"} {"site":"www.runoob.com","name":"菜鳥教程","num":5}"site":"www.baidu.com"} {"site":"www.google.com","name":"Google"} {"site":"www.runoob.com","name":"菜鳥教程","num":5}當第一個文檔插入時,集合就會被創建。
合法的集合名
- 集合名不能是空字符串""。
- 集合名不能含有\0字符(空字符),這個字符表示集合名的結尾。
- 集合名不能以"system."開頭,這是為系統集合保留的前綴。
- 用戶創建的集合名字不能含有保留字符。有些驅動程序的確支持在集合名里面包含,這是因為某些系統生成的集合中包含該字符。除非你要訪問這種系統創建的集合,否則千萬不要在名字里出現$。
如下實例:
db.col.findOne().col.findOne()capped collections
Capped collections 就是固定大小的collection。
它有很高的性能以及隊列過期的特性(過期按照插入的順序). 有點和 "RRD" 概念類似。
Capped collections是高性能自動的維護對象的插入順序。它非常適合類似記錄日志的功能 和標準的collection不同,你必須要顯式的創建一個capped collection, 指定一個collection的大小,單位是字節。collection的數據存儲空間值提前分配的。
要注意的是指定的存儲大小包含了數據庫的頭信息。
db.createCollection("mycoll", {capped:true, size:100000}).createCollection("mycoll", {capped:true, size:100000})- 在capped collection中,你能添加新的對象。
- 能進行更新,然而,對象不會增加存儲空間。如果增加,更新就會失敗 。
- 數據庫不允許進行刪除。使用drop()方法刪除collection所有的行。
- 注意: 刪除之后,你必須顯式的重新創建這個collection。
- 在32bit機器中,capped collection最大存儲為1e9( 1X109)個字節。
元數據
數據庫的信息是存儲在集合中。它們使用了系統的命名空間:
dbname.system.*.system.*在MongoDB數據庫中名字空間 .system.* 是包含多種系統信息的特殊集合(Collection),如下:
| dbname.system.namespaces | 列出所有名字空間。 |
| dbname.system.indexes | 列出所有索引。 |
| dbname.system.profile | 包含數據庫概要(profile)信息。 |
| dbname.system.users | 列出所有可訪問數據庫的用戶。 |
| dbname.local.sources | 包含復制對端(slave)的服務器信息和狀態。 |
對于修改系統集合中的對象有如下限制。
在{{system.indexes}}插入數據,可以創建索引。但除此之外該表信息是不可變的(特殊的drop index命令將自動更新相關信息)。
{{system.users}}是可修改的。 {{system.profile}}是可刪除的。
MongoDB 數據類型
下表為MongoDB中常用的幾種數據類型。
| String | 字符串。存儲數據常用的數據類型。在 MongoDB 中,UTF-8 編碼的字符串才是合法的。 |
| Integer | 整型數值。用于存儲數值。根據你所采用的服務器,可分為 32 位或 64 位。 |
| Boolean | 布爾值。用于存儲布爾值(真/假)。 |
| Double | 雙精度浮點值。用于存儲浮點值。 |
| Min/Max keys | 將一個值與 BSON(二進制的 JSON)元素的最低值和最高值相對比。 |
| Array | 用于將數組或列表或多個值存儲為一個鍵。 |
| Timestamp | 時間戳。記錄文檔修改或添加的具體時間。 |
| Object | 用于內嵌文檔。 |
| Null | 用于創建空值。 |
| Symbol | 符號。該數據類型基本上等同于字符串類型,但不同的是,它一般用于采用特殊符號類型的語言。 |
| Date | 日期時間。用 UNIX 時間格式來存儲當前日期或時間。你可以指定自己的日期時間:創建 Date 對象,傳入年月日信息。 |
| Object ID | 對象 ID。用于創建文檔的 ID。 |
| Binary Data | 二進制數據。用于存儲二進制數據。 |
| Code | 代碼類型。用于在文檔中存儲 JavaScript 代碼。 |
| Regular expression | 正則表達式類型。用于存儲正則表達式。 |
下面說明下幾種重要的數據類型。
ObjectId
ObjectId 類似唯一主鍵,可以很快的去生成和排序,包含 12 bytes,含義是:
- 前 4 個字節表示創建?unix時間戳,格林尼治時間?UTC?時間,比北京時間早了 8 個小時
- 接下來的 3 個字節是機器標識碼
- 緊接的兩個字節由進程 id 組成 PID
- 最后三個字節是隨機數
MongoDB 中存儲的文檔必須有一個 _id 鍵。這個鍵的值可以是任何類型的,默認是個 ObjectId 對象
由于 ObjectId 中保存了創建的時間戳,所以你不需要為你的文檔保存時間戳字段,你可以通過 getTimestamp 函數來獲取文檔的創建時間:
> var newObject = ObjectId() > newObject.getTimestamp() ISODate("2017-11-25T07:21:10Z") var newObject = ObjectId() > newObject.getTimestamp() ISODate("2017-11-25T07:21:10Z")ObjectId 轉為字符串
> newObject.str 5a1919e63df83ce79df8b38f newObject.str 5a1919e63df83ce79df8b38f字符串
BSON 字符串都是 UTF-8 編碼。
時間戳
BSON 有一個特殊的時間戳類型用于 MongoDB 內部使用,與普通的 日期 類型不相關。 時間戳值是一個 64 位的值。其中:
- 前32位是一個 time_t 值(與Unix新紀元相差的秒數)
- 后32位是在某秒中操作的一個遞增的序數
在單個 mongod 實例中,時間戳值通常是唯一的。
在復制集中, oplog 有一個 ts 字段。這個字段中的值使用BSON時間戳表示了操作時間。
BSON 時間戳類型主要用于 MongoDB 內部使用。在大多數情況下的應用開發中,你可以使用 BSON 日期類型。
日期
表示當前距離 Unix新紀元(1970年1月1日)的毫秒數。日期類型是有符號的, 負數表示 1970 年之前的日期。
> var mydate1 = new Date() //格林尼治時間 > mydate1 ISODate("2018-03-04T14:58:51.233Z") > typeof mydate1 object var mydate1 = new Date() //格林尼治時間 > mydate1 ISODate("2018-03-04T14:58:51.233Z") > typeof mydate1 object > var mydate2 = ISODate() //格林尼治時間 > mydate2 ISODate("2018-03-04T15:00:45.479Z") > typeof mydate2 object var mydate2 = ISODate() //格林尼治時間 > mydate2 ISODate("2018-03-04T15:00:45.479Z") > typeof mydate2 object這樣創建的時間是日期類型,可以使用 JS 中的 Date 類型的方法。
返回一個時間類型的字符串:
> var mydate1str = mydate1.toString() > mydate1str Sun Mar 04 2018 14:58:51 GMT+0000 (UTC) > typeof mydate1str string var mydate1str = mydate1.toString() > mydate1str Sun Mar 04 2018 14:58:51 GMT+0000 (UTC) > typeof mydate1str string或者
> Date() Sun Mar 04 2018 15:02:59 GMT+0000 (UTC) Date() Sun Mar 04 2018 15:02:59 GMT+0000 (UTC) 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Windows 安装 MongoDB 和 可视化工具Robo3T的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Dom4j完整教程~属性相关
- 下一篇: CompletableFuture详解~