MongoDB簡(jiǎn)介
- MongoDB 是一個(gè)面向文檔的數(shù)據(jù)庫(kù)瞄桨。
- MongoDB的設(shè)計(jì)采用橫向擴(kuò)展孩饼。面向文檔的數(shù)據(jù)模型使它更容易的在多臺(tái)服務(wù)器之間進(jìn)行數(shù)據(jù)分割说榆。
- MongoDB 能自動(dòng)處理跨集群的數(shù)據(jù)和負(fù)載伶椿,自動(dòng)重新分配文檔,及將用戶請(qǐng)求路由到正確的機(jī)器上阱缓。如果一個(gè)集群需要更大的容量古掏,只需要想集群添加新服務(wù)器帜平,MongoDB就會(huì)自動(dòng)將現(xiàn)有數(shù)據(jù)想新服務(wù)器傳送
- MongoDB能對(duì)文檔進(jìn)行動(dòng)態(tài)填充吟温,也能預(yù)分配數(shù)據(jù)文件以利用額外的空間來(lái)?yè)Q取穩(wěn)定的性能序仙。
- MongoDB 把盡可能多的內(nèi)存用作緩存,試圖為每次查詢自動(dòng)選擇正確的索引
MongoDB 基礎(chǔ)知識(shí)
- 文檔:文檔是mongodb的核心概念鲁豪。文檔就是鍵值對(duì)的一個(gè)有序集潘悼。
- 建不能含有\(zhòng)0(空字符串)。 這個(gè)字符用于表示鍵的結(jié)果
- '.' 和 '$' 具有特殊意義爬橡,只能在特定環(huán)境使用治唤,通常這兩個(gè)字符是被保留的。
- 集合:就是一組文檔糙申,一個(gè)集合就相當(dāng)于一張表
- 子集合:使用 '.' 分割不同命名空間的子集合宾添。GridFs(一種用于存儲(chǔ)大文件的協(xié)議) 使用子集合來(lái)存儲(chǔ)文件元數(shù)據(jù)。
- 數(shù)據(jù)庫(kù):多個(gè)集合組成數(shù)據(jù)庫(kù)郭宝,在磁盤上不同數(shù)據(jù)庫(kù)放置在不同文件中辞槐。數(shù)據(jù)庫(kù)名為文件名,特殊語(yǔ)義數(shù)據(jù)庫(kù):
- admin 從身份驗(yàn)證角度這是root 數(shù)據(jù)庫(kù)掷漱,一些特定的服務(wù)器命令只能從admin數(shù)據(jù)庫(kù)運(yùn)行粘室,
- local 一臺(tái)服務(wù)器上所以的本地集合都可以存儲(chǔ)在這個(gè)數(shù)據(jù)庫(kù)中
- config 分片設(shè)置,分片信息會(huì)存在這個(gè)數(shù)據(jù)庫(kù)中
- MongoDB shell
- 自動(dòng)JavaScript shell
2.insert 函數(shù)將一個(gè)文檔添加到集合中 - find 函數(shù)用于查詢集合里的文檔卜范,自動(dòng)顯示做多20個(gè)匹配文檔衔统,若只想查詢一個(gè)文檔,可用findOne
- update 函數(shù)用于更新文檔,至少接受兩個(gè)參數(shù)锦爵,第一個(gè)是限定條件(用于匹配待更新文檔)舱殿,第二個(gè)是更新文檔
- remove 函數(shù)用于將文檔從數(shù)據(jù)庫(kù)中永久刪除
- 自動(dòng)JavaScript shell
- 數(shù)據(jù)類型 類似于json
- null 用于表示空值活著不存在的字段
- 布爾值 true/false
- 數(shù)值 默認(rèn)使用64位浮點(diǎn)數(shù)值 NumberInt類(表示4字節(jié)帶符號(hào)整數(shù)) NumberLong類(表示8字符帶符號(hào)整數(shù))
- 字符串 UTF-8 字符串
- 日期被存儲(chǔ)為自新紀(jì)元以來(lái)經(jīng)過(guò)的毫秒數(shù),不存儲(chǔ)時(shí)區(qū)险掀,創(chuàng)建日期對(duì)象時(shí)使用 new Date(...)
- 正則表達(dá)式 使用正則表達(dá)式作為限定條件沪袭,語(yǔ)法也與JavaScript的正則表達(dá)式語(yǔ)法相同
- 數(shù)組 數(shù)據(jù)列表或數(shù)據(jù)集可以表示數(shù)組
- 內(nèi)嵌文檔 文檔可嵌套其他文檔
- 對(duì)象ID 是一個(gè)12字節(jié)的ID,是文檔的唯一標(biāo)識(shí)
- 二進(jìn)制數(shù)據(jù) 是一個(gè)任意字節(jié)的字符串
- 代碼 任意JavaScript代碼
- mongodb 中存儲(chǔ)的文檔必須有一個(gè) "_id" 鍵樟氢。這鍵值可以是任何類型的冈绊,默認(rèn)是個(gè)ObjectId對(duì)象。ObjectId使用12字節(jié)的存儲(chǔ)空間埠啃。ObjectId的前4個(gè)字節(jié)是從標(biāo)準(zhǔn)紀(jì)元開(kāi)始的時(shí)間戳死宣,單位為秒。 接下來(lái)3個(gè)字節(jié)是所以主機(jī)的唯一標(biāo)識(shí)碴开。通常為主機(jī)名的散列值(hash),確保不同主機(jī)生成不用的ObjectId毅该。再兩位為產(chǎn)生ObjectId的進(jìn)程的進(jìn)程標(biāo)識(shí)符(PID),前9個(gè)字節(jié)保證同一秒鐘不同進(jìn)程產(chǎn)生ObjectId是唯一的。最后三個(gè)字節(jié)是一個(gè)自動(dòng)增加的計(jì)數(shù)器潦牛。一秒鐘最多允許每個(gè)進(jìn)程用擁有256^3(16777216)個(gè)不同的ObjectId眶掌。如果插入文檔時(shí)沒(méi)有"_id"鍵,系統(tǒng)會(huì)自動(dòng)創(chuàng)建一個(gè)罢绽,通常會(huì)在客戶端有驅(qū)動(dòng)程序完成畏线,能交給客戶端驅(qū)動(dòng)程序做就不要交給服務(wù)器做
創(chuàng)建、更新和刪除文檔
- insert 方法向目標(biāo)集合插入一個(gè)文檔
- batchInsert 函數(shù)實(shí)現(xiàn)批量插入良价,接受一個(gè)文檔數(shù)組作為參數(shù)
- 所有文檔都必須小于16MB
- remove 刪除文檔寝殴,接受一個(gè)查詢文檔作為可選參數(shù)
- update 更新文檔 兩個(gè)參數(shù)(查詢文檔,修改器文檔)
- $set 用來(lái)指定一個(gè)字段的值明垢。如果這個(gè)字段不存在蚣常,則創(chuàng)建它∪可以修改值的類型抵蚊。可以修改內(nèi)嵌文檔溯革。
- $inc 修改器用來(lái)增加已有鍵的值贞绳,或者該鍵不存在那就創(chuàng)建一個(gè)。只能用于整形致稀,長(zhǎng)整形或雙精度浮點(diǎn)型的值冈闭。
- $push 向已有的數(shù)組末尾加入一個(gè)元素,要是沒(méi)有就創(chuàng)建一個(gè)新數(shù)組抖单。
- $addToSet 數(shù)組中插入值萎攒,將數(shù)組看做集合可以避免重復(fù)插入遇八。
- pop":{"key":1}} 從數(shù)組末尾刪除一個(gè)元素;{"$pop":{"key":1}} 從頭部刪除
- $pull 將所有匹配的文檔刪除耍休,而不是刪除一個(gè)刃永。
- set":{"comment.$.author":"jim"}}) 只更新第一個(gè)匹配的元素。
- upsert 沒(méi)有找到合適更新條件的文檔喧锦,就會(huì)以這個(gè)條件和更新文檔為基本創(chuàng)建一個(gè)新的文檔雳刺。
- 更新多個(gè)文檔,默認(rèn)update更新只能對(duì)符合匹配條件到的第一個(gè)文檔執(zhí)行操作裸违。要更新所有匹配的文檔掖桦,可以將update的第4個(gè)參數(shù)設(shè)置為true
- 寫入安全機(jī)制是一種客戶端設(shè)置,用于控制寫入的安全級(jí)別供汛。
- 應(yīng)答式寫入:數(shù)據(jù)庫(kù)會(huì)給出相應(yīng)枪汪,告知是否成功
- 非應(yīng)答式寫入:不返回任何相應(yīng),無(wú)法知道是否成功
查詢
- find來(lái)進(jìn)行查詢怔昨,查詢返回一個(gè)集合中文檔的子集
- 通過(guò)find的第二個(gè)參數(shù)來(lái)指定想要的鍵雀久。
- 操作符 lte (小于等于) ; gte (大于等于) ; $ne (不等于)
- $in 可以用來(lái)查詢一個(gè)鍵的多個(gè)值
- $or 可以在多個(gè)鍵中查詢?nèi)我獾慕o定值
- $nin 將返回與數(shù)組中所有條件不匹配的文檔
- $not 是元條件句,可以用在任何其他條件之上
- $exists 判斷定鍵值已存在
- $all 查詢數(shù)組趁舀,通過(guò)多個(gè)元素來(lái)匹配數(shù)組
- size:3}
- slice:10} {slice:[23,10]}
- where 語(yǔ)句
- $limit 返回限制數(shù)量結(jié)果
- $skip 略過(guò)參數(shù)匹配的文檔矮烹,然后返回余下的文檔越庇,盡量避免使用skip,skip數(shù)量非常多的話奉狈,skip就會(huì)變得很慢卤唉。
- $sort 接受一個(gè)對(duì)象作為參數(shù),這個(gè)對(duì)象是一組鍵/值對(duì),鍵對(duì)應(yīng)文檔的鍵名仁期,值代表排序的方向桑驱。排序方向可以是1(升序)或者-1(降序)