摘要:通過在文檔中嵌入文檔和數(shù)組面向文檔的方法能夠僅使用一條記錄來表現(xiàn)復(fù)雜的層次關(guān)系這與使用現(xiàn)代面向?qū)ο笳Z言的開發(fā)者對(duì)數(shù)據(jù)的看法一致。在模式下會(huì)限制輸出信息數(shù)據(jù)庫(kù)命令輸出,副本集活動(dòng),連接接受事件,連接關(guān)閉事件。指定一個(gè)文件或。
預(yù)熱看我之前的文章Node學(xué)習(xí)記錄: mongodb
這個(gè)系列旨在系統(tǒng)的學(xué)習(xí)Mongodb
使用windows的同學(xué)可以看這篇文章MongoDB開發(fā)學(xué)習(xí)
學(xué)習(xí)目標(biāo)MongoDB官網(wǎng):https://www.mongodb.com/關(guān)系型數(shù)據(jù)庫(kù) 與 非關(guān)系型數(shù)據(jù)庫(kù)
MongoDB中文社區(qū):http://www.mongoing.com/
mongodb github:https://github.com/mongodb
MongoDB是一個(gè)面向文檔(document-oriented)的數(shù)據(jù)庫(kù),而不是關(guān)系型數(shù)據(jù)庫(kù)。不采用關(guān)
系模型主要是為了獲得更好的擴(kuò)展性。當(dāng)然, 還有其他一些好處。與關(guān)系型數(shù)據(jù)庫(kù)相比,面向文檔的數(shù)據(jù)庫(kù)不再有行(row)的概念,取而代之的是更為靈活的文檔(document)模型。通過在文檔中嵌入文檔和數(shù)組,面向文檔的方法能夠僅使用一條記錄來表現(xiàn)復(fù)雜的層次關(guān)系,這與使用現(xiàn)代面向?qū)ο笳Z言的開發(fā)者對(duì)數(shù)據(jù)的看法一致。
另外,不再有預(yù)定義模式(predefined schema):文檔的鍵(key)和值(value)不再是固定的類型和大小。由于沒有固定的模式,根據(jù)需要添加或刪除字段變得更容易了。通常,由于開發(fā) 者能夠進(jìn)行快速迭代,所以開發(fā)進(jìn)程得得以加快。而且,實(shí)驗(yàn)更容易進(jìn)行。開發(fā)者能嘗試大量的數(shù)據(jù)模型,從中選擇一個(gè)最好的。
MongoDB并不具備一些在關(guān)系型數(shù)據(jù)庫(kù)中很普遍的功能,如連接(join)和復(fù)雜的多行事務(wù)(multirow transaction)。省略這些功能是出于架構(gòu)上的考慮(為了得到更好的擴(kuò)展性),因?yàn)樵?b>分布式系統(tǒng)中這兩個(gè)功能難以高效地實(shí)現(xiàn)。基礎(chǔ)概念
文檔是MongoDB中數(shù)據(jù)的基本單元,非常類似于關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)中的行,但更具表現(xiàn)力
集合(collection)可以看作是一個(gè)擁有動(dòng)態(tài)模式(dynamic schema)的表
MongoDB的一個(gè)實(shí)例可以擁有多個(gè)互相獨(dú)立的數(shù)據(jù)庫(kù)(database),每個(gè)數(shù)據(jù)庫(kù)都擁有自己的集合
每個(gè)文檔都有一個(gè)特殊的鍵"_id",這個(gè)鍵在文檔所屬的集合中唯一的。
MongoDB自帶一個(gè)簡(jiǎn)單但功能強(qiáng)大的JavaScript shell可用于管理MongDB的實(shí)例 或 數(shù)據(jù)操作
文檔文檔就是鍵值對(duì)的一個(gè)有序集
{"x" : 1, "y":2}與{"y": 2, "x": 1}是不同的
通常,字段順序并不重要,無須讓數(shù)據(jù)庫(kù)模式依賴特定的字段順序(MongoDB會(huì)對(duì)字段重新排序)。 在某些特殊情況下,字段順序變得非常重要 一些編程語言對(duì)文檔的默認(rèn)表示根本就不包含順序問題(如:Python中的字典、Perl和Ruby 1.8中的散列)。通常,這些語言的驅(qū)動(dòng)具有某些特殊的機(jī)制,可以在必要時(shí)指定文檔的順序。
MongoDB不但區(qū)分類型,而且區(qū)分大小寫
下面的兩個(gè)文檔是不同的
{"foo" : 3} {"foo" : "3"}
下面兩個(gè)文檔也是不同的
{"foo" : 3} {"Foo" : 3}
MongoDB的文檔不能有重復(fù)的鍵
下面的文檔是非法的:
{"greeting" : "Hello, world!", "greeting" : "Hello, MongoDB!"}集合
集合就是一組文檔。
如果將MongoDB中的一個(gè)文檔比喻為關(guān)系型數(shù)據(jù)庫(kù)中的一行,那么一個(gè)集合就相當(dāng)于一張表。
動(dòng)態(tài)模式
一個(gè)集合里面的文檔可以是各式各樣的,這意味著,下面兩個(gè)文檔可以存儲(chǔ)在同一個(gè)集合里面:
{"greeting" : "Hello, world!"} {"foo" : 5}
————> 這里引發(fā)一個(gè)問題:
數(shù)據(jù)庫(kù)因?yàn)榧侠锩婵梢苑胖萌魏挝臋n,還有必要使用多個(gè)集合嗎?(既然沒有必要區(qū)分不同類型文檔的模式,為什么還要使用多個(gè)集合呢)
如果把各種各樣的文檔不加區(qū)分地放在同一個(gè)集合里,無論對(duì)開發(fā)者還是對(duì)管理員來
說都將是噩夢(mèng)。開發(fā)者要么確保每次查詢只返回特定類型的文檔,要么讓執(zhí)行查詢的應(yīng)用程序來處理所有不同類型的文檔。如果查詢博客文章時(shí)還要剔除含有作者數(shù)據(jù)的 文檔,這會(huì)帶來很大困擾。
在一個(gè)集合里查詢特定類型的文檔在速度上也很不劃算,分開查詢多個(gè)集合要快得多。例如,假設(shè)集合里面一個(gè)名為"type"的字段用于指明文檔是skim、whole還是 chunky monkey。那么,如果從一個(gè)集合中查詢這三種類型的文檔,速度會(huì)很慢。但如果將這三種不同類型的文檔拆分為三個(gè)不同的集合,每次只需要查詢相應(yīng)的集合,速 度快得多。
把同種類型的文檔放在一個(gè)集合里,數(shù)據(jù)會(huì)更加集中。從一個(gè)只包含博客文章的集合里查詢幾篇文章,或者從同時(shí)含文章數(shù)據(jù)和作者數(shù)據(jù)的集合里查出幾篇文章,相比之下,前者需要的磁盤尋道操作更少。創(chuàng)建索引時(shí),需要使用文檔的附加結(jié)構(gòu)(特別是創(chuàng)建唯一索引時(shí))。索引是按照集合來定義的。在一個(gè)集合中只放入一種類型的文檔,可以更有效地對(duì)集合進(jìn)行索引。
上面這些重要原因促使我們創(chuàng)建一個(gè)模式,把相關(guān)類型的文檔組織在一起,盡管MongoDB對(duì)此并沒有強(qiáng)制要求。
在MongoDB中,多個(gè)文檔組成集合,而多個(gè)集合可以組成數(shù)據(jù)庫(kù)。一個(gè)MongoDB實(shí)例可以承載多個(gè)數(shù)據(jù)庫(kù),每個(gè)數(shù)據(jù)庫(kù)擁有0個(gè)或者多個(gè)集合。每個(gè)數(shù)據(jù)庫(kù)都有獨(dú)立的權(quán)限,即便是在磁盤上,不同的數(shù)據(jù)庫(kù)也放置在不同的文件中。按照經(jīng)驗(yàn),我們將有關(guān)一個(gè)應(yīng)用程序的所有數(shù)據(jù)都存儲(chǔ)在同一個(gè)數(shù)據(jù)庫(kù)中。要想在同一個(gè)MongoDB服務(wù)器上存放多個(gè)應(yīng)用程序或者 用戶的數(shù)據(jù),就需要使用不同的數(shù)據(jù)庫(kù)。安裝
Linux平臺(tái)安裝MongoDB
或者
在 Ubuntu 16.04 上安裝 MongoDB 可參考 MongoDB Docs:
//非二進(jìn)制包安裝方式 $ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6 $ echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list $ sudo apt-get update $ sudo apt-get install -y mongodb-org
這樣安裝默認(rèn)端口是27017
先啟動(dòng)mongod
sudo service mongod start
在 CentOS 7 上安裝 MongoDB 可參考 MongoDB Docs:
$ sudo vi /etc/yum.repos.d/mongodb-org-3.4.repo [mongodb-org-3.4] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc $ sudo yum install -y mongodb-org
mongod : mongodb數(shù)據(jù)庫(kù)的執(zhí)行程序(數(shù)據(jù)庫(kù)部署使用這個(gè)程序)
mongo :用來連接mongodb數(shù)據(jù)服務(wù)器的客戶端,對(duì)數(shù)據(jù)的所有操作,需要先使用mongo客戶端連接到mongodb服務(wù)器之后才能進(jìn)行
mongoimport mongoexport 用來做mongodb的導(dǎo)入導(dǎo)出
mongodump mongorestore用來導(dǎo)入導(dǎo)出二進(jìn)制數(shù)據(jù),不能被直接讀取,一般做數(shù)據(jù)的備份與恢復(fù)
mongooplog 用來做操作日志的回放,oplog是mongodb復(fù)制集中用來記錄操作記錄的數(shù)據(jù)集合
mongostat 查看各種狀態(tài)
搭建簡(jiǎn)單的mongodb服務(wù)器搭建MongoDB服務(wù)器之后,需要使用客戶端連接,才能進(jìn)行操作。
連接方法:使用編譯時(shí)候生成的客戶端連接
使用各種驅(qū)動(dòng)連接
關(guān)閉服務(wù)kill進(jìn)程
在kill進(jìn)程時(shí)候需要注意需要使用 kill-15 或者kill不加任何參數(shù),不要使用kill-9。
Linux kill -9 和 kill -15 的區(qū)別
db.shutdownServer()
use admin db.shutdownServer()
https://robomongo.org/
https://blog.csdn.net/jian1ji...
https://www.cnblogs.com/jinxi...
mongodb的mongo.conf文件 啟動(dòng)參數(shù)啟動(dòng)MongoDB有2種方式:
一是直接指定配置參數(shù),
二是指定配置文件。
mongodb啟動(dòng)腳本為mongod,我們可以這樣啟動(dòng):
./mongod –port=27017 –host=127.0.0.1 –dbpath=db –logpath=27017.log –fork=true
也可以在bin目錄創(chuàng)建如下mongo.conf文件
#bind_ip_all = true # 任何機(jī)器可以連接 bing_ip = 127.0.0.1,192.168.0.3 # 本機(jī)和192.168.0.3可以訪問 port = 27017 # 實(shí)例運(yùn)行在27017端口(默認(rèn)) dbpath = /usr/local/mongodb/db # 數(shù)據(jù)文件夾存放地址(db要預(yù)先創(chuàng)建) logpath = /usr/local/mongodb/logs/27017.log # 日志文件地址 logappend = false # 啟動(dòng)時(shí) 添加還是重寫日志文件 fork = true # 是否后臺(tái)運(yùn)行 auth = true # 開啟校驗(yàn)用戶
啟動(dòng)的時(shí)候在bin目錄執(zhí)行:
./mongod -f mongo.conf # 或者 ./mongod –config=mongo.conf
更多的配置信息點(diǎn)這里: https://my.oschina.net/pwd/bl...
這種方式啟動(dòng)方便的地方就是我們可以在依賴mongodb的項(xiàng)目中定義好mongodb.conf(YAML-based格式的配置文件) `
項(xiàng)目代碼在這里,歡迎folk和star:https://github.com/AlexZ33/eg...
systemLog: verbosity: 0 #日志文件輸出的級(jí)別,越大級(jí)別越低。 quiet: true #boolean 在quiet模式下會(huì)限制輸出信息:數(shù)據(jù)庫(kù)命令輸出,副本集活動(dòng),連接接受事件,連接關(guān)閉事件。 syslogFacility: user #string,默認(rèn)為user 指定syslog日志信息的設(shè)備級(jí)別。需要指定--syslog來使用這個(gè)選項(xiàng)。 destination: file # string指定一個(gè)文件或syslog。如果指定為文件,必須同時(shí)指定systemLog.path path: /dev/null # string發(fā)送所有的診斷信息日志,默認(rèn)重啟后會(huì)覆蓋。 quiet: true logAppend: false # boolean是否啟用追加日志。 timeStampFormat # string,默認(rèn)為iso8601-local 日志信息中的時(shí)間戳格式 storage: dbPath: /data/db directoryPerDB: true journal: enabled: true engine: wiredTiger wiredTiger: engineConfig: directoryForIndexes: true processManagement: fork: true # boolean,默認(rèn)為false是守護(hù)進(jìn)程在后臺(tái)運(yùn)行。 net: bindIp: 127.0.0.1 port: 27017 maxIncomingConnections: 1000000
我們可以在npm scripts中加入:
"mongod": "sudo mongod --config config/mongodb.conf"參考
安裝與遠(yuǎn)程連接
慕課網(wǎng) mongoDB入門篇
MongoDB 實(shí)戰(zhàn)
MongoDB 權(quán)威指南
mongod conf
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/19080.html
摘要:通過前面四篇的學(xué)習(xí),我們已經(jīng)在本地安裝了一個(gè)數(shù)據(jù)庫(kù),并且通過一個(gè)簡(jiǎn)單的應(yīng)用的單元測(cè)試,插入了幾條記錄到中,并通過查看到了插入的數(shù)據(jù)。讀操作最終將會(huì)使用我們?cè)谧詈?jiǎn)單的入門教程之三使用代碼往里插入數(shù)據(jù)里介紹的方法,即通過注入的實(shí)例完成對(duì)的操作。 通過前面四篇的學(xué)習(xí),我們已經(jīng)在本地安裝了一個(gè)MongoDB數(shù)據(jù)庫(kù),并且通過一個(gè)簡(jiǎn)單的Spring boot應(yīng)用的單元測(cè)試,插入了幾條記錄到Mong...
摘要:通過前面四篇的學(xué)習(xí),我們已經(jīng)在本地安裝了一個(gè)數(shù)據(jù)庫(kù),并且通過一個(gè)簡(jiǎn)單的應(yīng)用的單元測(cè)試,插入了幾條記錄到中,并通過查看到了插入的數(shù)據(jù)。讀操作最終將會(huì)使用我們?cè)谧詈?jiǎn)單的入門教程之三使用代碼往里插入數(shù)據(jù)里介紹的方法,即通過注入的實(shí)例完成對(duì)的操作。 通過前面四篇的學(xué)習(xí),我們已經(jīng)在本地安裝了一個(gè)MongoDB數(shù)據(jù)庫(kù),并且通過一個(gè)簡(jiǎn)單的Spring boot應(yīng)用的單元測(cè)試,插入了幾條記錄到Mong...
摘要:上一篇提到為我們提供的客戶端管理工具是,可以用它操作數(shù)據(jù)庫(kù),進(jìn)行增刪改查。對(duì)比刪除集合中的所有文檔保留集合刪除集合數(shù)據(jù)更新方法用于更新已存在的文檔參數(shù)說明的查詢條件,類似查詢內(nèi)后面的??蛇x,拋出異常的級(jí)別。 上一篇提到:mongodb 為我們提供的客戶端管理工具是mongo,可以用它操作數(shù)據(jù)庫(kù),進(jìn)行增刪改查(CRUD)。現(xiàn)在我們?nèi)缟弦徽履菢?,啟?dòng)mongod,再啟動(dòng)mongo 不記得的...
閱讀 3878·2021-11-12 10:34
閱讀 2865·2021-09-22 15:14
閱讀 852·2019-08-30 15:53
閱讀 3257·2019-08-30 12:53
閱讀 1373·2019-08-29 18:32
閱讀 2825·2019-08-29 16:41
閱讀 1123·2019-08-26 13:40
閱讀 1866·2019-08-23 18:07