MongoDB入門(mén)教程02

注:本系列教程是自己學(xué)習(xí)的記錄惑折,內(nèi)容來(lái)至 菜鳥(niǎo)教程
MongoDB入門(mén)教程01
MongoDB入門(mén)教程02
MongoDB入門(mén)教程03
MongoDB入門(mén)教程04
MongoDB入門(mén)教程05

1. MongoDB概念解析

SQL術(shù)語(yǔ)/概念 MongoDB術(shù)語(yǔ)/概念 解釋/說(shuō)明
database database 數(shù)據(jù)庫(kù)
table collection 數(shù)據(jù)庫(kù)表/集合
row document 數(shù)據(jù)記錄/文檔
column field 數(shù)據(jù)字段/域
index index 索引
table joins aggregate 聚合實(shí)現(xiàn)(look up)
primary key primary key 主鍵,MongoDB自動(dòng)將_id字段設(shè)置為主鍵

2. 安裝配置(v3.6)

MAC版使用brew 安裝:brew install mongodb

啟動(dòng):brew services start mongodb
停止:brew services stop mongodb
重啟:brew services restart mongodb
配置文件:/usr/local/etc/mongod.conf

配置文件格式采用yaml的方式如蚜,參考

systemLog:
 destination: file
 path: /usr/local/var/log/mongodb/mongo.log
 logAppend: true
storage:
 dbPath: /usr/local/var/mongodb
net:
 # bindIp: 127.0.0.1   # 只能通過(guò)localhost(127.0.0.1)來(lái)訪問(wèn),配置成 0.0.0.0态秧,所有可用的IP4可訪問(wèn)
 bindIpAll: true      # 所有IP4 IP6 均可訪問(wèn)

3. 數(shù)據(jù)庫(kù)(DataBase)

啟動(dòng)時(shí)出現(xiàn)權(quán)限警告炼鞠,請(qǐng)參考官網(wǎng)文檔:MongoDB Security Part II: 10 mistakes that can compromise your database

$ mongo
MongoDB shell version v3.6.4
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.4
... 
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
runoob  0.000GB
> use runoob
switched to db runoob
  • admin: 從權(quán)限的角度來(lái)看捂敌,這是"root"數(shù)據(jù)庫(kù)。要是將一個(gè)用戶添加到這個(gè)數(shù)據(jù)庫(kù)艰毒,這個(gè)用戶自動(dòng)繼承所有數(shù)據(jù)庫(kù)的權(quán)限筐高。一些特定的服務(wù)器端命令也只能從這個(gè)數(shù)據(jù)庫(kù)運(yùn)行,比如列出所有的數(shù)據(jù)庫(kù)或者關(guān)閉服務(wù)器

  • local: 這個(gè)數(shù)據(jù)永遠(yuǎn)不會(huì)被復(fù)制丑瞧,可以用來(lái)存儲(chǔ)限于本地單臺(tái)服務(wù)器的任意集合

  • config: 當(dāng)Mongo用于分片設(shè)置時(shí)柑土,config數(shù)據(jù)庫(kù)在內(nèi)部使用,用于保存分片的相關(guān)信息

4. 文檔(Document)

文檔是一組鍵值(key-value)對(duì)(即BSON绊汹,Binary JSON)稽屏。MongoDB 的文檔不需要設(shè)置相同的字段,并且相同的字段不需要相同的數(shù)據(jù)類型西乖,這與關(guān)系型數(shù)據(jù)庫(kù)有很大的區(qū)別狐榔,也是 MongoDB 非常突出的特點(diǎn)。

例子如下:

{"site":"www.google.com", "slogan":"Don't be evil"}

注意:

  1. 文檔中的鍵/值對(duì)是有序的获雕。

  2. 文檔中的值不僅可以是在雙引號(hào)里面的字符串薄腻,還可以是其他幾種數(shù)據(jù)類型(甚至可以是整個(gè)嵌入的文檔)。

  3. MongoDB區(qū)分類型和大小寫(xiě)典鸡。

  4. MongoDB的文檔不能有重復(fù)的鍵被廓。

  5. 文檔的鍵是字符串。除了少數(shù)例外情況萝玷,鍵可以使用任意UTF-8字符嫁乘。

5. 集合(Collection)

集合存在于數(shù)據(jù)庫(kù)中,集合沒(méi)有固定的結(jié)構(gòu)球碉,這意味著你在對(duì)集合可以插入不同格式和類型的數(shù)據(jù)蜓斧,但通常情況下我們插入集合的數(shù)據(jù)都會(huì)有一定的關(guān)聯(lián)性。

{"site":"www.baidu.com"}
{"site":"www.google.com","slogan":"Don't be evil"}
{"site":"www.reibang.com","name":"簡(jiǎn)書(shū)", "description": "最佳寫(xiě)作網(wǎng)站"}

當(dāng)?shù)谝粋€(gè)文檔插入時(shí)睁冬,集合就會(huì)被創(chuàng)建挎春。

6. capped collections

Capped collections 是固定大小的 collection看疙,是高性能自動(dòng)維護(hù)對(duì)象插入的順序。它非常適合類似記錄日志的功能和標(biāo)準(zhǔn)的collection不同直奋,你必須要顯式的創(chuàng)建一個(gè)capped collection能庆, 指定一個(gè)collection的大小,單位是字節(jié)脚线。collection的數(shù)據(jù)存儲(chǔ)空間值提前分配的搁胆。當(dāng)集合大小達(dá)到最大值時(shí),最早插入的數(shù)據(jù)會(huì)被覆蓋掉

> db.createCollection("capcoll", {capped:true, size: 100000})
  • 在capped collection中邮绿,你能添加新的對(duì)象渠旁。

  • 能進(jìn)行更新,然而船逮,對(duì)象不會(huì)增加存儲(chǔ)空間顾腊。如果增加,更新就會(huì)失敗 挖胃。

  • 數(shù)據(jù)庫(kù)不允許進(jìn)行刪除杂靶。可使用drop()方法刪除collection所有的行冠骄。

  • 注意: 刪除之后伪煤,你必須顯式的重新創(chuàng)建這個(gè)collection。

  • 在32bit機(jī)器中凛辣,capped collection最大存儲(chǔ)為1e9( 1X109)個(gè)字節(jié)抱既。

7. 元數(shù)據(jù)

數(shù)據(jù)庫(kù)的信息是存儲(chǔ)在集合中,它們使用了系統(tǒng)的命名空間:

> dbname.system.*

在MongoDB數(shù)據(jù)庫(kù)中名字空間 <dbname>.system.* 是包含多種系統(tǒng)信息的特殊集合(Collection)扁誓,如下:

集合命名空間 描述
dbname.system.namespaces 列出所有名字空間防泵。
dbname.system.indexes 列出所有索引。
dbname.system.profile 包含數(shù)據(jù)庫(kù)概要(profile)信息蝗敢。
dbname.system.users 列出所有可訪問(wèn)數(shù)據(jù)庫(kù)的用戶捷泞。
dbname.local.sources 包含復(fù)制對(duì)端(slave)的服務(wù)器信息和狀態(tài)。

對(duì)于修改系統(tǒng)集合中的對(duì)象有如下限制寿谴。

{{system.indexes}}插入數(shù)據(jù)锁右,可以創(chuàng)建索引。但除此之外該表信息是不可變的(特殊的drop index命令將自動(dòng)更新相關(guān)信息)讶泰。
{{system.users}}是可修改的咏瑟,{{system.profile}}是可刪除的

8. 數(shù)據(jù)類型

數(shù)據(jù)類型 描述
String 字符串。存儲(chǔ)數(shù)據(jù)常用的數(shù)據(jù)類型痪署。在 MongoDB 中码泞,UTF-8 編碼的字符串才是合法的。
Integer 整型數(shù)值狼犯。用于存儲(chǔ)數(shù)值余寥。根據(jù)你所采用的服務(wù)器领铐,可分為 32 位或 64 位。
Boolean 布爾值宋舷。用于存儲(chǔ)布爾值(真/假)绪撵。
Double 雙精度浮點(diǎn)值。用于存儲(chǔ)浮點(diǎn)值祝蝠。
Min/Max keys 將一個(gè)值與 BSON(二進(jìn)制的 JSON)元素的最低值和最高值相對(duì)比莲兢。
Array 用于將數(shù)組或列表或多個(gè)值存儲(chǔ)為一個(gè)鍵。
Timestamp 時(shí)間戳续膳。記錄文檔修改或添加的具體時(shí)間。
Object 用于內(nèi)嵌文檔收班。
Null 用于創(chuàng)建空值坟岔。
Symbol 符號(hào)。該數(shù)據(jù)類型基本上等同于字符串類型摔桦,但不同的是社付,它一般用于采用特殊符號(hào)類型的語(yǔ)言。
Date 日期時(shí)間邻耕。用 UNIX 時(shí)間格式來(lái)存儲(chǔ)當(dāng)前日期或時(shí)間鸥咖。你可以指定自己的日期時(shí)間:創(chuàng)建 Date 對(duì)象,傳入年月日信息兄世。
Object ID 對(duì)象 ID啼辣。用于創(chuàng)建文檔的 ID。
Binary Data 二進(jìn)制數(shù)據(jù)御滩。用于存儲(chǔ)二進(jìn)制數(shù)據(jù)鸥拧。
Code 代碼類型。用于在文檔中存儲(chǔ) JavaScript 代碼削解。
Regular expression 正則表達(dá)式類型富弦。用于存儲(chǔ)正則表達(dá)式。

9. ObjectId

ObjectId 類似唯一主鍵氛驮,可以很快的去生成和排序腕柜,包含 12 bytes,含義是:

  • 前 4 個(gè)字節(jié)表示創(chuàng)建 unix時(shí)間戳,格林尼治時(shí)間 UTC 時(shí)間矫废,比北京時(shí)間晚了 8 個(gè)小時(shí)

  • 接下來(lái)的 3 個(gè)字節(jié)是機(jī)器標(biāo)識(shí)碼

  • 緊接的兩個(gè)字節(jié)由進(jìn)程 id 組成 PID

  • 最后三個(gè)字節(jié)是隨機(jī)數(shù)

MongoDB 中存儲(chǔ)的文檔必須有一個(gè) _id 鍵盏缤。這個(gè)鍵的值可以是任何類型的,默認(rèn)是個(gè) ObjectId 對(duì)象

由于 ObjectId 中保存了創(chuàng)建的時(shí)間戳磷脯,所以你不需要為你的文檔保存時(shí)間戳字段蛾找,你可以通過(guò) getTimestamp 函數(shù)來(lái)獲取文檔的創(chuàng)建時(shí)間:

> var newObject = ObjectId()
> newObject.getTimestamp()
ISODate("2018-10-31T02:20:43Z")

// ObjectId 轉(zhuǎn)為字符串
> newObject.str
5bd9117bfd76390be3425d11

10. 字符串

BSON 字符串都是 UTF-8 編碼。

11. 時(shí)間戳

BSON 有一個(gè)特殊的時(shí)間戳類型用于 MongoDB 內(nèi)部使用赵誓,與普通的 日期 類型不相關(guān)打毛。 時(shí)間戳值是一個(gè) 64 位的值柿赊。其中:

  • 前32位是一個(gè) time_t 值(與Unix新紀(jì)元相差的秒數(shù))

  • 后32位是在某秒中操作的一個(gè)遞增的序數(shù)

在單個(gè) mongod 實(shí)例中,時(shí)間戳值通常是唯一的幻枉。

在復(fù)制集中碰声, oplog 有一個(gè) ts 字段。這個(gè)字段中的值使用BSON時(shí)間戳表示了操作時(shí)間熬甫。

BSON 時(shí)間戳類型主要用于 MongoDB 內(nèi)部使用胰挑。在大多數(shù)情況下的應(yīng)用開(kāi)發(fā)中,你可以使用 BSON 日期類型椿肩。

12. 日期

表示當(dāng)前距離 Unix新紀(jì)元(1970年1月1日)的毫秒數(shù)瞻颂。日期類型是有符號(hào)的, 負(fù)數(shù)表示 1970 年之前的日期。

> var mydate1 = new Date()     //格林尼治時(shí)間
> mydate1
ISODate("2018-03-04T14:58:51.233Z")
> typeof mydate1
object
?
> var mydate2 = ISODate() //格林尼治時(shí)間
> mydate2
ISODate("2018-03-04T15:00:45.479Z")
> typeof mydate2
object
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末郑象,一起剝皮案震驚了整個(gè)濱河市贡这,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌厂榛,老刑警劉巖盖矫,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異击奶,居然都是意外死亡辈双,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén)柜砾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)湃望,“玉大人,你說(shuō)我怎么就攤上這事痰驱∠惨” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵萄唇,是天一觀的道長(zhǎng)檩帐。 經(jīng)常有香客問(wèn)我,道長(zhǎng)另萤,這世上最難降的妖魔是什么湃密? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任四敞,我火速辦了婚禮泛源,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘忿危。我一直安慰自己达箍,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布铺厨。 她就那樣靜靜地躺著缎玫,像睡著了一般硬纤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赃磨,一...
    開(kāi)封第一講書(shū)人閱讀 49,166評(píng)論 1 284
  • 那天筝家,我揣著相機(jī)與錄音,去河邊找鬼邻辉。 笑死溪王,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的值骇。 我是一名探鬼主播莹菱,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼吱瘩!你這毒婦竟也來(lái)了芒珠?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤搅裙,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后裹芝,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體部逮,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年嫂易,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了兄朋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡怜械,死狀恐怖颅和,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情缕允,我是刑警寧澤峡扩,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站障本,受9級(jí)特大地震影響教届,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜驾霜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一案训、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧粪糙,春花似錦强霎、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)轩触。三九已至,卻和暖如春椿争,著一層夾襖步出監(jiān)牢的瞬間怕膛,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工秦踪, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留褐捻,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓椅邓,卻偏偏與公主長(zhǎng)得像柠逞,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子景馁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容