日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

mongodb连接失败_MongoDB 基础入门

發(fā)布時(shí)間:2025/3/19 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mongodb连接失败_MongoDB 基础入门 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

mongodb

一、NoSQL 簡(jiǎn)介

NoSQL(NoSQL = Not Only SQL ),意即"不僅僅是SQL"。

在現(xiàn)代的計(jì)算系統(tǒng)上每天網(wǎng)絡(luò)上都會(huì)產(chǎn)生龐大的數(shù)據(jù)量。

這些數(shù)據(jù)有很大一部分是由關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDMBSs)來處理。 1970年 E.F.Codd's提出的關(guān)系模型的論文 "A relational model of data for large shared data banks",這使得數(shù)據(jù)建模和應(yīng)用程序編程更加簡(jiǎn)單。

通過應(yīng)用實(shí)踐證明,關(guān)系模型是非常適合于客戶服務(wù)器編程,遠(yuǎn)遠(yuǎn)超出預(yù)期的利益,今天它是結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)在網(wǎng)絡(luò)和商務(wù)應(yīng)用的主導(dǎo)技術(shù)。

NoSQL 是一項(xiàng)全新的數(shù)據(jù)庫革命性運(yùn)動(dòng),早期就有人提出,發(fā)展至2009年趨勢(shì)越發(fā)高漲。NoSQL的擁護(hù)者們提倡運(yùn)用非關(guān)系型的數(shù)據(jù)存儲(chǔ),相對(duì)于鋪天蓋地的關(guān)系型數(shù)據(jù)庫運(yùn)用,這一概念無疑是一種全新的思維的注入。

1.1 關(guān)系型數(shù)據(jù)庫遵循ACID規(guī)則

事務(wù)在英文中是transaction,和現(xiàn)實(shí)世界中的交易很類似,它有如下四個(gè)特性:

1、A (Atomicity) 原子性 原子性很容易理解,也就是說事務(wù)里的所有操作要么全部做完,要么都不做,事務(wù)成功的條件是事務(wù)里的所有操作都成功,只要有一個(gè)操作失敗,整個(gè)事務(wù)就失敗,需要回滾。

比如銀行轉(zhuǎn)賬,從A賬戶轉(zhuǎn)100元至B賬戶,分為兩個(gè)步驟:1)從A賬戶取100元;2)存入100元至B賬戶。這兩步要么一起完成,要么一起不完成,如果只完成第一步,第二步失敗,錢會(huì)莫名其妙少了100元。

2、C (Consistency) 一致性 一致性也比較容易理解,也就是說數(shù)據(jù)庫要一直處于一致的狀態(tài),事務(wù)的運(yùn)行不會(huì)改變數(shù)據(jù)庫原本的一致性約束。

例如現(xiàn)有完整性約束a+b=10,如果一個(gè)事務(wù)改變了a,那么必須得改變b,使得事務(wù)結(jié)束后依然滿足a+b=10,否則事務(wù)失敗。

3、I (Isolation) 獨(dú)立性 所謂的獨(dú)立性是指并發(fā)的事務(wù)之間不會(huì)互相影響,如果一個(gè)事務(wù)要訪問的數(shù)據(jù)正在被另外一個(gè)事務(wù)修改,只要另外一個(gè)事務(wù)未提交,它所訪問的數(shù)據(jù)就不受未提交事務(wù)的影響。 比如現(xiàn)有有個(gè)交易是從A賬戶轉(zhuǎn)100元至B賬戶,在這個(gè)交易還未完成的情況下,如果此時(shí)B查詢自己的賬戶,是看不到新增加的100元的。

4、D (Durability) 持久性 持久性是指一旦事務(wù)提交后,它所做的修改將會(huì)永久的保存在數(shù)據(jù)庫上,即使出現(xiàn)宕機(jī)也不會(huì)丟失。

1.2 分布式系統(tǒng)

分布式系統(tǒng)(distributed system)由多臺(tái)計(jì)算機(jī)和通信的軟件組件通過計(jì)算機(jī)網(wǎng)絡(luò)連接(本地網(wǎng)絡(luò)或廣域網(wǎng))組成。

分布式系統(tǒng)是建立在網(wǎng)絡(luò)之上的軟件系統(tǒng)。正是因?yàn)檐浖奶匦?#xff0c;所以分布式系統(tǒng)具有高度的內(nèi)聚性和透明性。

因此,網(wǎng)絡(luò)和分布式系統(tǒng)之間的區(qū)別更多的在于高層軟件(特別是操作系統(tǒng)),而不是硬件。

分布式系統(tǒng)可以應(yīng)用在在不同的平臺(tái)上如:Pc、工作站、局域網(wǎng)和廣域網(wǎng)上等。

1.3 分布式計(jì)算的優(yōu)點(diǎn)

可靠性(容錯(cuò)) : 分布式計(jì)算系統(tǒng)中的一個(gè)重要的優(yōu)點(diǎn)是可靠性。一臺(tái)服務(wù)器的系統(tǒng)崩潰并不影響到其余的服務(wù)器。

可擴(kuò)展性: 在分布式計(jì)算系統(tǒng)可以根據(jù)需要增加更多的機(jī)器。

資源共享: 共享數(shù)據(jù)是必不可少的應(yīng)用,如銀行,預(yù)訂系統(tǒng)。

靈活性: 由于該系統(tǒng)是非常靈活的,它很容易安裝,實(shí)施和調(diào)試新的服務(wù)。

更快的速度: 分布式計(jì)算系統(tǒng)可以有多臺(tái)計(jì)算機(jī)的計(jì)算能力,使得它比其他系統(tǒng)有更快的處理速度。

開放系統(tǒng): 由于它是開放的系統(tǒng),本地或者遠(yuǎn)程都可以訪問到該服務(wù)。

更高的性能: 相較于集中式計(jì)算機(jī)網(wǎng)絡(luò)集群可以提供更高的性能(及更好的性價(jià)比)。

1.4分布式計(jì)算的缺點(diǎn)

故障排除: : 故障排除和診斷問題。

軟件: 更少的軟件支持是分布式計(jì)算系統(tǒng)的主要缺點(diǎn)。

網(wǎng)絡(luò): 網(wǎng)絡(luò)基礎(chǔ)設(shè)施的問題,包括:傳輸問題,高負(fù)載,信息丟失等。

安全性: 開發(fā)系統(tǒng)的特性讓分布式計(jì)算系統(tǒng)存在著數(shù)據(jù)的安全性和共享的風(fēng)險(xiǎn)等問題。

什么是NoSQL?

NoSQL,指的是非關(guān)系型的數(shù)據(jù)庫。NoSQL有時(shí)也稱作Not Only SQL的縮寫,是對(duì)不同于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)庫管理系統(tǒng)的統(tǒng)稱。

NoSQL用于超大規(guī)模數(shù)據(jù)的存儲(chǔ)。(例如谷歌或Facebook每天為他們的用戶收集萬億比特的數(shù)據(jù))。這些類型的數(shù)據(jù)存儲(chǔ)不需要固定的模式,無需多余操作就可以橫向擴(kuò)展。

為什么使用NoSQL ?

今天我們可以通過第三方平臺(tái)(如:Google,Facebook等)可以很容易的訪問和抓取數(shù)據(jù)。用戶的個(gè)人信息,社交網(wǎng)絡(luò),地理位置,用戶生成的數(shù)據(jù)和用戶操作日志已經(jīng)成倍的增加。我們?nèi)绻獙?duì)這些用戶數(shù)據(jù)進(jìn)行挖掘,那SQL數(shù)據(jù)庫已經(jīng)不適合這些應(yīng)用了, NoSQL數(shù)據(jù)庫的發(fā)展也卻能很好的處理這些大的數(shù)據(jù)。

實(shí)例

社會(huì)化關(guān)系網(wǎng):

Each record: UserID1, UserID2 Separate records: UserID, first_name,last_name, age, gender,... Task: Find all friends of friends of friends of ... friends of a given user.

Wikipedia 頁面 :

Large collection of documents Combination of structured and unstructured data Task: Retrieve all pages regarding athletics of Summer Olympic before 1950.

RDBMS vs NoSQL

RDBMS

  • 高度組織化結(jié)構(gòu)化數(shù)據(jù)
  • 結(jié)構(gòu)化查詢語言(SQL) (SQL)
  • 數(shù)據(jù)和關(guān)系都存儲(chǔ)在單獨(dú)的表中。
  • 數(shù)據(jù)操縱語言,數(shù)據(jù)定義語言
  • 嚴(yán)格的一致性
  • 基礎(chǔ)事務(wù)

NoSQL

  • 代表著不僅僅是SQL
  • 沒有聲明性查詢語言
  • 沒有預(yù)定義的模式 -鍵 - 值對(duì)存儲(chǔ),列存儲(chǔ),文檔存儲(chǔ),圖形數(shù)據(jù)庫
  • 最終一致性,而非ACID屬性
  • 非結(jié)構(gòu)化和不可預(yù)知的數(shù)據(jù)
  • CAP定理
  • 高性能,高可用性和可伸縮性

NoSQL 簡(jiǎn)史

NoSQL一詞最早出現(xiàn)于1998年,是Carlo Strozzi開發(fā)的一個(gè)輕量、開源、不提供SQL功能的關(guān)系數(shù)據(jù)庫。

2009年,Last.fm的Johan Oskarsson發(fā)起了一次關(guān)于分布式開源數(shù)據(jù)庫的討論[2],來自Rackspace的Eric Evans再次提出了NoSQL的概念,這時(shí)的NoSQL主要指非關(guān)系型、分布式、不提供ACID的數(shù)據(jù)庫設(shè)計(jì)模式。

2009年在亞特蘭大舉行的"no:sql(east)"討論會(huì)是一個(gè)里程碑,其口號(hào)是"select fun, profit from real_world where relational=false;"。因此,對(duì)NoSQL最普遍的解釋是"非關(guān)聯(lián)型的",強(qiáng)調(diào)Key-Value Stores和文檔數(shù)據(jù)庫的優(yōu)點(diǎn),而不是單純的反對(duì)RDBMS。

CAP定理(CAP theorem)

在計(jì)算機(jī)科學(xué)中, CAP定理(CAP theorem), 又被稱作 布魯爾定理(Brewer's theorem), 它指出對(duì)于一個(gè)分布式計(jì)算系統(tǒng)來說,不可能同時(shí)滿足以下三點(diǎn):

  • 一致性(Consistency) (所有節(jié)點(diǎn)在同一時(shí)間具有相同的數(shù)據(jù))
  • 可用性(Availability) (保證每個(gè)請(qǐng)求不管成功或者失敗都有響應(yīng))
  • 分隔容忍(Partition tolerance) (系統(tǒng)中任意信息的丟失或失敗不會(huì)影響系統(tǒng)的繼續(xù)運(yùn)作)

CAP理論的核心是:一個(gè)分布式系統(tǒng)不可能同時(shí)很好的滿足一致性,可用性和分區(qū)容錯(cuò)性這三個(gè)需求,最多只能同時(shí)較好的滿足兩個(gè)。

因此,根據(jù) CAP 原理將 NoSQL 數(shù)據(jù)庫分成了滿足 CA 原則、滿足 CP 原則和滿足 AP 原則三 大類:

  • CA - 單點(diǎn)集群,滿足一致性,可用性的系統(tǒng),通常在可擴(kuò)展性上不太強(qiáng)大。
  • CP - 滿足一致性,分區(qū)容忍必的系統(tǒng),通常性能不是特別高。
  • AP - 滿足可用性,分區(qū)容忍性的系統(tǒng),通常可能對(duì)一致性要求低一些。

NoSQL的優(yōu)點(diǎn)/缺點(diǎn)

優(yōu)點(diǎn):

  • - 高可擴(kuò)展性
  • - 分布式計(jì)算
  • - 低成本
  • - 架構(gòu)的靈活性,半結(jié)構(gòu)化數(shù)據(jù)
  • - 沒有復(fù)雜的關(guān)系

缺點(diǎn):

  • - 沒有標(biāo)準(zhǔn)化
  • - 有限的查詢功能(到目前為止)
  • - 最終一致是不直觀的程序

BASE

BASE:Basically Available, Soft-state, Eventually Consistent。 由 Eric Brewer 定義。

CAP理論的核心是:一個(gè)分布式系統(tǒng)不可能同時(shí)很好的滿足一致性,可用性和分區(qū)容錯(cuò)性這三個(gè)需求,最多只能同時(shí)較好的滿足兩個(gè)。

BASE是NoSQL數(shù)據(jù)庫通常對(duì)可用性及一致性的弱要求原則:

  • Basically Availble --基本可用
  • Soft-state --軟狀態(tài)/柔性事務(wù)。 "Soft state" 可以理解為"無連接"的, 而 "Hard state" 是"面向連接"的
  • Eventual Consistency --最終一致性 最終一致性, 也是是 ACID 的最終目的。

ACID vs BASE

ACIDBASE原子性(Atomicity)基本可用(Basically Available)一致性(Consistency)軟狀態(tài)/柔性事務(wù)(Soft state)隔離性(Isolation)最終一致性 (Eventual consistency)持久性 (Durable)

NoSQL 數(shù)據(jù)庫分類

類型部分代表特點(diǎn)列存儲(chǔ)HbaseCassandraHypertable顧名思義,是按列存儲(chǔ)數(shù)據(jù)的。最大的特點(diǎn)是方便存儲(chǔ)結(jié)構(gòu)化和半結(jié)構(gòu)化數(shù)據(jù),方便做數(shù)據(jù)壓縮,對(duì)針對(duì)某一列或者某幾列的查詢有非常大的IO優(yōu)勢(shì)。文檔存儲(chǔ)MongoDBCouchDB文檔存儲(chǔ)一般用類似json的格式存儲(chǔ),存儲(chǔ)的內(nèi)容是文檔型的。這樣也就有有機(jī)會(huì)對(duì)某些字段建立索引,實(shí)現(xiàn)關(guān)系數(shù)據(jù)庫的某些功能。key-value存儲(chǔ)Tokyo Cabinet / TyrantBerkeley DBMemcacheDBRedis可以通過key快速查詢到其value。一般來說,存儲(chǔ)不管value的格式,照單全收。(Redis包含了其他功能)圖存儲(chǔ)Neo4JFlockDB圖形關(guān)系的最佳存儲(chǔ)。使用傳統(tǒng)關(guān)系數(shù)據(jù)庫來解決的話性能低下,而且設(shè)計(jì)使用不方便。對(duì)象存儲(chǔ)db4oVersant通過類似面向?qū)ο笳Z言的語法操作數(shù)據(jù)庫,通過對(duì)象的方式存取數(shù)據(jù)。xml數(shù)據(jù)庫Berkeley DB XMLBaseX高效的存儲(chǔ)XML數(shù)據(jù),并支持XML的內(nèi)部查詢語法,比如XQuery,Xpath。

二、MongoDB 概念解析

不管我們學(xué)習(xí)什么數(shù)據(jù)庫都應(yīng)該學(xué)習(xí)其中的基礎(chǔ)概念,在mongodb中基本的概念是文檔、集合、數(shù)據(jù)庫,下面我們挨個(gè)介紹。

下表將幫助您更容易理解Mongo中的一些概念:

SQL術(shù)語/概念MongoDB術(shù)語/概念解釋/說明databasedatabase數(shù)據(jù)庫tablecollection數(shù)據(jù)庫表/集合rowdocument數(shù)據(jù)記錄行/文檔columnfield數(shù)據(jù)字段/域indexindex索引table joins表連接,MongoDB不支持primary keyprimary key主鍵,MongoDB自動(dòng)將_id字段設(shè)置為主鍵

通過下圖實(shí)例,我們也可以更直觀的的了解Mongo中的一些概念:

2.1 數(shù)據(jù)庫

一個(gè)mongodb中可以建立多個(gè)數(shù)據(jù)庫。

MongoDB的默認(rèn)數(shù)據(jù)庫為"db",該數(shù)據(jù)庫存儲(chǔ)在data目錄中。

MongoDB的單個(gè)實(shí)例可以容納多個(gè)獨(dú)立的數(shù)據(jù)庫,每一個(gè)都有自己的集合和權(quán)限,不同的數(shù)據(jù)庫也放置在不同的文件中。

"show dbs" 命令可以顯示所有數(shù)據(jù)的列表。

$ ./mongo MongoDB shell version: 3.0.6 connecting to: test > show dbs local 0.078GB test 0.078GB >

執(zhí)行 "db" 命令可以顯示當(dāng)前數(shù)據(jù)庫對(duì)象或集合。

$ ./mongo MongoDB shell version: 3.0.6 connecting to: test > db test >

運(yùn)行"use"命令,可以連接到一個(gè)指定的數(shù)據(jù)庫。

> use local switched to db local > db local >

以上實(shí)例命令中,"local" 是你要鏈接的數(shù)據(jù)庫。

在下一個(gè)章節(jié)我們將詳細(xì)講解MongoDB中命令的使用。

數(shù)據(jù)庫也通過名字來標(biāo)識(shí)。數(shù)據(jù)庫名可以是滿足以下條件的任意UTF-8字符串。

  • 不能是空字符串("")。
  • 不得含有' '(空格)、.、$、/、和0 (空宇符)。
  • 應(yīng)全部小寫。
  • 最多64字節(jié)。

有一些數(shù)據(jù)庫名是保留的,可以直接訪問這些有特殊作用的數(shù)據(jù)庫。

  • admin: 從權(quán)限的角度來看,這是"root"數(shù)據(jù)庫。要是將一個(gè)用戶添加到這個(gè)數(shù)據(jù)庫,這個(gè)用戶自動(dòng)繼承所有數(shù)據(jù)庫的權(quán)限。一些特定的服務(wù)器端命令也只能從這個(gè)數(shù)據(jù)庫運(yùn)行,比如列出所有的數(shù)據(jù)庫或者關(guān)閉服務(wù)器。
  • local: 這個(gè)數(shù)據(jù)永遠(yuǎn)不會(huì)被復(fù)制,可以用來存儲(chǔ)限于本地單臺(tái)服務(wù)器的任意集合
  • config: 當(dāng)Mongo用于分片設(shè)置時(shí),config數(shù)據(jù)庫在內(nèi)部使用,用于保存分片的相關(guān)信息。

2.2 文檔

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

一個(gè)簡(jiǎn)單的文檔例子如下:

{"site":"www.runoob.com", "name":"菜鳥教程"}

下表列出了 RDBMS 與 MongoDB 對(duì)應(yīng)的術(shù)語:

需要注意的是:

  • 文檔中的鍵/值對(duì)是有序的。
  • 文檔中的值不僅可以是在雙引號(hào)里面的字符串,還可以是其他幾種數(shù)據(jù)類型(甚至可以是整個(gè)嵌入的文檔)。
  • MongoDB區(qū)分類型和大小寫。
  • MongoDB的文檔不能有重復(fù)的鍵。
  • 文檔的鍵是字符串。除了少數(shù)例外情況,鍵可以使用任意UTF-8字符。
  • 文檔鍵命名規(guī)范:

    • 鍵不能含有0 (空字符)。這個(gè)字符用來表示鍵的結(jié)尾。
    • .和$有特別的意義,只有在特定環(huán)境下才能使用。
    • 以下劃線"_"開頭的鍵是保留的(不是嚴(yán)格要求的)。

    2.3 集合

    集合就是 MongoDB 文檔組,類似于 RDBMS (關(guān)系數(shù)據(jù)庫管理系統(tǒng):Relational Database Management System)中的表格。

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

    比如,我們可以將以下不同數(shù)據(jù)結(jié)構(gòu)的文檔插入到集合中:

    {"site":"www.baidu.com"} {"site":"www.google.com","name":"Google"} {"site":"www.runoob.com","name":"菜鳥教程","num":5}

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

    合法的集合名

    • 集合名不能是空字符串""。
    • 集合名不能含有0字符(空字符),這個(gè)字符表示集合名的結(jié)尾。
    • 集合名不能以"system."開頭,這是為系統(tǒng)集合保留的前綴。
    • 用戶創(chuàng)建的集合名字不能含有保留字符。有些驅(qū)動(dòng)程序的確支持在集合名里面包含,這是因?yàn)槟承┫到y(tǒng)生成的集合中包含該字符。除非你要訪問這種系統(tǒng)創(chuàng)建的集合,否則千萬不要在名字里出現(xiàn)$。 

    如下實(shí)例:

    db.col.findOne()

    capped collections

    Capped collections 就是固定大小的collection。

    它有很高的性能以及隊(duì)列過期的特性(過期按照插入的順序). 有點(diǎn)和 "RRD" 概念類似。

    Capped collections是高性能自動(dòng)的維護(hù)對(duì)象的插入順序。它非常適合類似記錄日志的功能 和標(biāo)準(zhǔn)的collection不同,你必須要顯式的創(chuàng)建一個(gè)capped collection, 指定一個(gè)collection的大小,單位是字節(jié)。collection的數(shù)據(jù)存儲(chǔ)空間值提前分配的。

    要注意的是指定的存儲(chǔ)大小包含了數(shù)據(jù)庫的頭信息。

    db.createCollection("mycoll", {capped:true, size:100000})
    • 在capped collection中,你能添加新的對(duì)象。
    • 能進(jìn)行更新,然而,對(duì)象不會(huì)增加存儲(chǔ)空間。如果增加,更新就會(huì)失敗 。
    • 數(shù)據(jù)庫不允許進(jìn)行刪除。使用drop()方法刪除collection所有的行。
    • 注意: 刪除之后,你必須顯式的重新創(chuàng)建這個(gè)collection。
    • 在32bit機(jī)器中,capped collection最大存儲(chǔ)為1e9( 1X109)個(gè)字節(jié)。

    2.4 元數(shù)據(jù)

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

    dbname.system.*

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

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

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

    {{system.users}}是可修改的。 {{system.profile}}是可刪除的。

    2.5 MongoDB 數(shù)據(jù)類型

    下表為MongoDB中常用的幾種數(shù)據(jù)類型。

    三、什么是MongoDB ?

    MongoDB 是由C++語言編寫的,是一個(gè)基于分布式文件存儲(chǔ)的開源數(shù)據(jù)庫系統(tǒng)。

    在高負(fù)載的情況下,添加更多的節(jié)點(diǎn),可以保證服務(wù)器性能。

    MongoDB 旨在為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。

    MongoDB 將數(shù)據(jù)存儲(chǔ)為一個(gè)文檔,數(shù)據(jù)結(jié)構(gòu)由鍵值(key=>value)對(duì)組成。MongoDB 文檔類似于 JSON 對(duì)象。字段值可以包含其他文檔,數(shù)組及文檔數(shù)組。

    主要特點(diǎn)

    • MongoDB的提供了一個(gè)面向文檔存儲(chǔ),操作起來比較簡(jiǎn)單和容易。
    • 你可以在MongoDB記錄中設(shè)置任何屬性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")來實(shí)現(xiàn)更快的排序。
    • 你可以通過本地或者網(wǎng)絡(luò)創(chuàng)建數(shù)據(jù)鏡像,這使得MongoDB有更強(qiáng)的擴(kuò)展性。
    • 如果負(fù)載的增加(需要更多的存儲(chǔ)空間和更強(qiáng)的處理能力) ,它可以分布在計(jì)算機(jī)網(wǎng)絡(luò)中的其他節(jié)點(diǎn)上這就是所謂的分片。
    • Mongo支持豐富的查詢表達(dá)式。查詢指令使用JSON形式的標(biāo)記,可輕易查詢文檔中內(nèi)嵌的對(duì)象及數(shù)組。
    • MongoDb 使用update()命令可以實(shí)現(xiàn)替換完成的文檔(數(shù)據(jù))或者一些指定的數(shù)據(jù)字段 。
    • Mongodb中的Map/reduce主要是用來對(duì)數(shù)據(jù)進(jìn)行批量處理和聚合操作。
    • Map和Reduce。Map函數(shù)調(diào)用emit(key,value)遍歷集合中所有的記錄,將key與value傳給Reduce函數(shù)進(jìn)行處理。
    • Map函數(shù)和Reduce函數(shù)是使用Javascript編寫的,并可以通過db.runCommand或mapreduce命令來執(zhí)行MapReduce操作。
    • GridFS是MongoDB中的一個(gè)內(nèi)置功能,可以用于存放大量小文件。
    • MongoDB允許在服務(wù)端執(zhí)行腳本,可以用Javascript編寫某個(gè)函數(shù),直接在服務(wù)端執(zhí)行,也可以把函數(shù)的定義存儲(chǔ)在服務(wù)端,下次直接調(diào)用即可。
    • MongoDB支持各種編程語言:RUBY,PYTHON,JAVA,C++,PHP,C#等多種語言。
    • MongoDB安裝簡(jiǎn)單。

    歷史 2007年10月,MongoDB由10gen團(tuán)隊(duì)所發(fā)展。2009年2月首度推出。

    • 2012年05月23日,MongoDB2.1 開發(fā)分支發(fā)布了! 該版本采用全新架構(gòu),包含諸多增強(qiáng)。
    • 2012年06月06日,MongoDB 2.0.6 發(fā)布,分布式文檔數(shù)據(jù)庫。
    • 2013年04月23日,MongoDB 2.4.3 發(fā)布,此版本包括了一些性能優(yōu)化,功能增強(qiáng)以及bug修復(fù)。
    • 2013年08月20日,MongoDB 2.4.6 發(fā)布,是目前最新的穩(wěn)定版。

    MongoDB 下載

    你可以在mongodb官網(wǎng)下載該安裝包,地址為: http://www.mongodb.org/downloads。MonggoDB支持以下平臺(tái):

    • OS X 32-bit
    • OS X 64-bit
    • Linux 32-bit
    • Linux 64-bit
    • Windows 32-bit
    • Windows 64-bit
    • Solaris i86pc
    • Solaris 64

    MongoDB 工具

    有幾種可用于MongoDB的管理工具。

    監(jiān)控

    MongoDB提供了網(wǎng)絡(luò)和系統(tǒng)監(jiān)控工具M(jìn)unin,它作為一個(gè)插件應(yīng)用于MongoDB中。

    Gangila是MongoDB高性能的系統(tǒng)監(jiān)視的工具,它作為一個(gè)插件應(yīng)用于MongoDB中。

    基于圖形界面的開源工具 Cacti, 用于查看CPU負(fù)載, 網(wǎng)絡(luò)帶寬利用率,它也提供了一個(gè)應(yīng)用于監(jiān)控 MongoDB 的插件。

    GUI

    • Fang of Mongo – 網(wǎng)頁式,由Django和jQuery所構(gòu)成。
    • Futon4Mongo – 一個(gè)CouchDB Futon web的mongodb山寨版。
    • Mongo3 – Ruby寫成。
    • MongoHub – 適用于OSX的應(yīng)用程序。
    • Opricot – 一個(gè)基于瀏覽器的MongoDB控制臺(tái), 由PHP撰寫而成。
    • Database Master — Windows的mongodb管理工具
    • RockMongo — 最好的PHP語言的MongoDB管理工具,輕量級(jí), 支持多國(guó)語言.

    MongoDB 應(yīng)用案例

    下面列舉一些公司MongoDB的實(shí)際應(yīng)用:

    • Craiglist上使用MongoDB的存檔數(shù)十億條記錄。
    • FourSquare,基于位置的社交網(wǎng)站,在Amazon EC2的服務(wù)器上使用MongoDB分享數(shù)據(jù)。
    • Shutterfly,以互聯(lián)網(wǎng)為基礎(chǔ)的社會(huì)和個(gè)人出版服務(wù),使用MongoDB的各種持久性數(shù)據(jù)存儲(chǔ)的要求。
    • bit.ly, 一個(gè)基于Web的網(wǎng)址縮短服務(wù),使用MongoDB的存儲(chǔ)自己的數(shù)據(jù)。
    • http://spike.com,一個(gè)MTV網(wǎng)絡(luò)的聯(lián)營(yíng)公司, http://spike.com使用MongoDB的。
    • Intuit公司,一個(gè)為小企業(yè)和個(gè)人的軟件和服務(wù)提供商,為小型企業(yè)使用MongoDB的跟蹤用戶的數(shù)據(jù)。
    • http://sourceforge.net,資源網(wǎng)站查找,創(chuàng)建和發(fā)布開源軟件免費(fèi),使用MongoDB的后端存儲(chǔ)。
    • http://etsy.com ,一個(gè)購買和出售手工制作物品網(wǎng)站,使用MongoDB。
    • 紐約時(shí)報(bào),領(lǐng)先的在線新聞門戶網(wǎng)站之一,使用MongoDB。
    • CERN,著名的粒子物理研究所,歐洲核子研究中心大型強(qiáng)子對(duì)撞機(jī)的數(shù)據(jù)使用MongoDB。

    四、MongoDB的安裝

    4.1 window平臺(tái)安裝 MongoDB

    MongoDB 提供了可用于 32 位和 64 位系統(tǒng)的預(yù)編譯二進(jìn)制包,你可以從MongoDB官網(wǎng)下載安裝,MongoDB 預(yù)編譯二進(jìn)制包下載地址:https://www.mongodb.com/download-center#community

    注意:在 MongoDB 2.2 版本后已經(jīng)不再支持 Windows XP 系統(tǒng)。最新版本也已經(jīng)沒有了 32 位系統(tǒng)的安裝文件。

    • MongoDB for Windows 64-bit 適合 64 位的 Windows Server 2008 R2, Windows 7 , 及最新版本的 Window 系統(tǒng)。
    • MongoDB for Windows 32-bit 適合 32 位的 Window 系統(tǒng)及最新的 Windows Vista。 32 位系統(tǒng)上 MongoDB 的數(shù)據(jù)庫最大為 2GB。
    • MongoDB for Windows 64-bit Legacy 適合 64 位的 Windows Vista, Windows Server 2003, 及 Windows Server 2008 。

    根據(jù)你的系統(tǒng)下載 32 位或 64 位的 .msi 文件,下載后雙擊該文件,按操作提示安裝即可。

    安裝過程中,你可以通過點(diǎn)擊 "Custom(自定義)" 按鈕來設(shè)置你的安裝目錄。

    下一步安裝 "install mongoDB compass" 不勾選,否則可能要很長(zhǎng)時(shí)間都一直在執(zhí)行安裝,MongoDB Compass 是一個(gè)圖形界面管理工具,我們可以在后面自己到官網(wǎng)下載安裝,下載地址:https://www.mongodb.com/download-center/compass。

    創(chuàng)建數(shù)據(jù)目錄

    MongoDB將數(shù)據(jù)目錄存儲(chǔ)在 db 目錄下。但是這個(gè)數(shù)據(jù)目錄不會(huì)主動(dòng)創(chuàng)建,我們?cè)诎惭b完成后需要?jiǎng)?chuàng)建它。請(qǐng)注意,數(shù)據(jù)目錄應(yīng)該放在根目錄下((如: C: 或者 D: 等 )。

    在本教程中,我們已經(jīng)在 C 盤安裝了 mongodb,現(xiàn)在讓我們創(chuàng)建一個(gè) data 的目錄然后在 data 目錄里創(chuàng)建 db 目錄。

    c:>cd c: ? c:>mkdir data ? c:>cd data ? c:data>mkdir db ? c:data>cd db ? c:datadb>

    你也可以通過 window 的資源管理器中創(chuàng)建這些目錄,而不一定通過命令行。

    4.1.1 命令行下運(yùn)行 MongoDB 服務(wù)器

    為了從命令提示符下運(yùn)行 MongoDB 服務(wù)器,你必須從 MongoDB 目錄的 bin 目錄中執(zhí)行 mongod.exe 文件。

    C:mongodbbinmongod --dbpath c:datadb

    如果執(zhí)行成功,會(huì)輸出如下信息:

    2015-09-25T15:54:09.212+0800 I CONTROL Hotfix KB2731284 or later update is not installed, will zero-out data files 2015-09-25T15:54:09.229+0800 I JOURNAL [initandlisten] journal dir=c:datadbj ournal 2015-09-25T15:54:09.237+0800 I JOURNAL [initandlisten] recover : no journal fil es present, no recovery needed 2015-09-25T15:54:09.290+0800 I JOURNAL [durability] Durability thread started 2015-09-25T15:54:09.294+0800 I CONTROL [initandlisten] MongoDB starting : pid=2 488 port=27017 dbpath=c:datadb 64-bit host=WIN-1VONBJOCE88 2015-09-25T15:54:09.296+0800 I CONTROL [initandlisten] targetMinOS: Windows 7/W indows Server 2008 R2 2015-09-25T15:54:09.298+0800 I CONTROL [initandlisten] db version v3.0.6 ……

    4.1.2 連接MongoDB

    我們可以在命令窗口中運(yùn)行 mongo.exe 命令即可連接上 MongoDB,執(zhí)行如下命令:

    C:mongodbbinmongo.exe

    4.1.3 配置 MongoDB 服務(wù)

    管理員模式打開命令行窗口

    創(chuàng)建目錄,執(zhí)行下面的語句來創(chuàng)建數(shù)據(jù)庫和日志文件的目錄

    mkdir c:datadb mkdir c:datalog

    創(chuàng)建配置文件

    創(chuàng)建一個(gè)配置文件。該文件必須設(shè)置 systemLog.path 參數(shù),包括一些附加的配置選項(xiàng)更好。

    例如,創(chuàng)建一個(gè)配置文件位于 C:mongodbmongod.cfg,其中指定 systemLog.path 和 storage.dbPath。具體配置內(nèi)容如下:

    systemLog:destination: filepath: c:datalogmongod.log storage:dbPath: c:datadb

    4.1.4 安裝 MongoDB服務(wù)

    通過執(zhí)行mongod.exe,使用--install選項(xiàng)來安裝服務(wù),使用--config選項(xiàng)來指定之前創(chuàng)建的配置文件。

    C:mongodbbinmongod.exe --config "C:mongodbmongod.cfg" --install

    要使用備用 dbpath,可以在配置文件(例如:C:mongodbmongod.cfg)或命令行中通過 --dbpath 選項(xiàng)指定。

    如果需要,您可以安裝 mongod.exe 或 mongos.exe 的多個(gè)實(shí)例的服務(wù)。只需要通過使用 --serviceName 和 --serviceDisplayName 指定不同的實(shí)例名。只有當(dāng)存在足夠的系統(tǒng)資源和系統(tǒng)的設(shè)計(jì)需要這么做。

    啟動(dòng)MongoDB服務(wù)

    net start MongoDB

    關(guān)閉MongoDB服務(wù)

    net stop MongoDB

    移除 MongoDB 服務(wù)

    C:mongodbbinmongod.exe --remove 命令行下運(yùn)行 MongoDB 服務(wù)器 和 配置 MongoDB 服務(wù) 任選一個(gè)方式啟動(dòng)就可以。

    任選一個(gè)操作就好

    4.1.5 MongoDB 后臺(tái)管理 Shell

    如果你需要進(jìn)入MongoDB后臺(tái)管理,你需要先打開mongodb裝目錄的下的bin目錄,然后執(zhí)行mongo.exe文件,MongoDB Shell是MongoDB自帶的交互式Javascript shell,用來對(duì)MongoDB進(jìn)行操作和管理的交互式環(huán)境。

    當(dāng)你進(jìn)入mongoDB后臺(tái)后,它默認(rèn)會(huì)鏈接到 test 文檔(數(shù)據(jù)庫):

    > mongo MongoDB shell version: 3.0.6 connecting to: test ……

    由于它是一個(gè)JavaScript shell,您可以運(yùn)行一些簡(jiǎn)單的算術(shù)運(yùn)算:

    > 2 + 2 4 >

    db 命令用于查看當(dāng)前操作的文檔(數(shù)據(jù)庫):

    > db test >

    插入一些簡(jiǎn)單的記錄并查找它:

    > db.runoob.insert({x:10}) WriteResult({ "nInserted" : 1 }) > db.runoob.find() { "_id" : ObjectId("5604ff74a274a611b0c990aa"), "x" : 10 } >

    第一個(gè)命令將數(shù)字 10 插入到 runoob 集合的 x 字段中。

    4.2 Linux平臺(tái)安裝MongoDB

    MongoDB 提供了 linux 各發(fā)行版本 64 位的安裝包,你可以在官網(wǎng)下載安裝包。

    下載地址:https://www.mongodb.com/download-center#community

    下載完安裝包,并解壓 tgz(以下演示的是 64 位 Linux上的安裝) 。

    curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz # 下載 tar -zxvf mongodb-linux-x86_64-3.0.6.tgz # 解壓mv mongodb-linux-x86_64-3.0.6/ /usr/local/mongodb # 將解壓包拷貝到指定目錄

    MongoDB 的可執(zhí)行文件位于 bin 目錄下,所以可以將其添加到 PATH 路徑中:

    export PATH=<mongodb-install-directory>/bin:$PATH

    <mongodb-install-directory> 為你 MongoDB 的安裝路徑。如本文的 /usr/local/mongodb 。

    4.2.1 創(chuàng)建數(shù)據(jù)庫目錄

    MongoDB的數(shù)據(jù)存儲(chǔ)在data目錄的db目錄下,但是這個(gè)目錄在安裝過程不會(huì)自動(dòng)創(chuàng)建,所以你需要手動(dòng)創(chuàng)建data目錄,并在data目錄中創(chuàng)建db目錄。

    以下實(shí)例中我們將data目錄創(chuàng)建于根目錄下(/)。

    注意:/data/db 是 MongoDB 默認(rèn)的啟動(dòng)的數(shù)據(jù)庫路徑(--dbpath)。

    mkdir -p /data/db

    4.2.2 命令行中運(yùn)行 MongoDB 服務(wù)

    你可以再命令行中執(zhí)行mongo安裝目錄中的bin目錄執(zhí)行mongod命令來啟動(dòng)mongdb服務(wù)。

    注意:如果你的數(shù)據(jù)庫目錄不是/data/db,可以通過 --dbpath 來指定。$ ./mongod 2015-09-25T16:39:50.549+0800 I JOURNAL [initandlisten] journal dir=/data/db/journal 2015-09-25T16:39:50.550+0800 I JOURNAL [initandlisten] recover : no journal files present, no recovery needed 2015-09-25T16:39:50.869+0800 I JOURNAL [initandlisten] preallocateIsFaster=true 3.16 2015-09-25T16:39:51.206+0800 I JOURNAL [initandlisten] preallocateIsFaster=true 3.52 2015-09-25T16:39:52.775+0800 I JOURNAL [initandlisten] preallocateIsFaster=true 7.7

    4.2.3 MongoDB后臺(tái)管理 Shell

    如果你需要進(jìn)入MongoDB后臺(tái)管理,你需要先打開mongodb裝目錄的下的bin目錄,然后執(zhí)行mongo命令文件。

    MongoDB Shell是MongoDB自帶的交互式Javascript shell,用來對(duì)MongoDB進(jìn)行操作和管理的交互式環(huán)境。

    當(dāng)你進(jìn)入mongoDB后臺(tái)后,它默認(rèn)會(huì)鏈接到 test 文檔(數(shù)據(jù)庫):

    $ cd /usr/local/mongodb/bin $ ./mongo MongoDB shell version: 3.0.6 connecting to: test Welcome to the MongoDB shell. ……

    由于它是一個(gè)JavaScript shell,您可以運(yùn)行一些簡(jiǎn)單的算術(shù)運(yùn)算:

    > 2+2 4 > 3+6 9

    現(xiàn)在讓我們插入一些簡(jiǎn)單的數(shù)據(jù),并對(duì)插入的數(shù)據(jù)進(jìn)行檢索:

    > db.runoob.insert({x:10}) WriteResult({ "nInserted" : 1 }) > db.runoob.find() { "_id" : ObjectId("5604ff74a274a611b0c990aa"), "x" : 10 } >

    第一個(gè)命令將數(shù)字 10 插入到 runoob 集合的 x 字段中。

    4.2.4 MongoDb web 用戶界面

    MongoDB 提供了簡(jiǎn)單的 HTTP 用戶界面。 如果你想啟用該功能,需要在啟動(dòng)的時(shí)候指定參數(shù) --rest 。

    注意:該功能只適用于 MongoDB 3.2 及之前的早期版本。$ ./mongod --dbpath=/data/db --rest

    MongoDB 的 Web 界面訪問端口比服務(wù)的端口多1000。

    如果你的MongoDB運(yùn)行端口使用默認(rèn)的27017,你可以在端口號(hào)為28017訪問web用戶界面,即地址為:http://localhost:28017。

    五、啟動(dòng)Mongodb服務(wù)

    在你的安裝目錄/bin下,有一個(gè)叫mongod.exe的應(yīng)用程序,這個(gè)程序就是用來啟動(dòng)你的mongodb服務(wù)器的。

    創(chuàng)建數(shù)據(jù)庫目錄

    在你想要存放數(shù)據(jù)的地方,新建一個(gè)文件夾,如db,我們推薦的數(shù)據(jù)庫目錄設(shè)置是:

    data/ conf -->配置文件目錄 mongod.conf -->配置文件 db -->數(shù)據(jù)庫目錄 log -->日志文件目錄 mongodb.log -->日志記錄文件

    啟動(dòng)數(shù)據(jù)庫

    我本地是window10環(huán)境,我的mongodb服務(wù)安裝在F盤的mongodb文件夾。我的數(shù)據(jù)目錄在F的data文件夾。

    啟動(dòng)doc命令,輸入一下命令:

    F:>mongodb/bin F:mongodbbin>mongod --path=/data/db

    輸出以下信息:

    最后一行顯示"waiting for connections on port 27017",表明mongodb服務(wù)器已經(jīng)啟動(dòng),正在27017窗口等待連接。

    再查看f:/data/db文件夾,已出現(xiàn)以下文件:

    說明mongodb服務(wù)啟動(dòng)成功。

    將MongoDB服務(wù)器作為Windows服務(wù)運(yùn)行

    像上面那樣啟動(dòng)mongodb,發(fā)現(xiàn)沒辦法輸入命令行了,這是可以采用打開多個(gè)窗口來連接,但這樣就太麻煩了,解決辦法就是將MongoDB服務(wù)器作為Windows服務(wù)運(yùn)行。

    輸入以下命令:

    F:mongodbbin>mongod --dbpath "f:datadb" --logpath "f:datalogmongodb.log" --serviceName "mongodb" --serviceDisplayName "mongodb" --install

    看到了如下輸出:

    2016-10-20T23:32:46.339+0800 I CONTROL log file "f:datalogmongodb.log" exists; moved to "f:datalogmongodb.log.2016-10-20T15-32-46".

    說明mongodb服務(wù)安裝成功。啟動(dòng)mongodb服務(wù):

    F:mongodbbin>net start mongodb MongoDB 服務(wù)已經(jīng)啟動(dòng)成功。

    說明mongodb啟動(dòng)成功。

    由于我們并沒有指定mongodb服務(wù)的端口號(hào),所以它啟動(dòng)在默認(rèn)的27017窗口。

    打開瀏覽器,范圍地址http://127.0.0.1:27017/,可看到如下信息

    It looks like you are trying to access MongoDB over HTTP on the native driver port.

    mongodb常用啟動(dòng)參數(shù)

    mongod.exe常用參數(shù)如下:

    mongod.exe的啟動(dòng)參數(shù),在window環(huán)境下和linux環(huán)境下并不相同,詳見mongod - mongodb啟動(dòng)服務(wù)工具。

    六、MongoDB - 連接

    6.1 啟動(dòng) MongoDB服務(wù)

    在前面的教程中,我們已經(jīng)討論了如何啟動(dòng)MongoDB服務(wù),你只需要在MongoDB安裝目錄的bin目錄下執(zhí)行'mongod'即可。

    執(zhí)行啟動(dòng)操作后,mongodb在輸出一些必要信息后不會(huì)輸出任何信息,之后就等待連接的建立,當(dāng)連接被建立后,就會(huì)開始打印日志信息。

    你可以使用 MongoDB shell 來連接 MongoDB 服務(wù)器。你也可以使用 PHP 來連接 MongoDB。本教程我們會(huì)使用 MongoDB shell 來連接 Mongodb 服務(wù),之后的章節(jié)我們將會(huì)介紹如何通過php 來連接MongoDB服務(wù)。

    6.2 通過shell連接MongoDB服務(wù)

    你可以通過執(zhí)行以下命令來連接MongoDB的服務(wù)。

    注意:localhost為主機(jī)名,這個(gè)選項(xiàng)是必須的:

    mongodb://localhost

    當(dāng)你執(zhí)行以上命令時(shí),你可以看到以下輸出結(jié)果:

    $ ./mongo MongoDB shell version: 3.0.6 connecting to: test > mongodb://localhostmongodb://localhost ...

    這時(shí)候你返回查看運(yùn)行 ./mongod 命令的窗口,可以看到是從哪里連接到MongoDB的服務(wù)器,您可以看到如下信息:

    ……省略信息…… 2015-09-25T17:22:27.336+0800 I CONTROL [initandlisten] allocator: tcmalloc 2015-09-25T17:22:27.336+0800 I CONTROL [initandlisten] options: { storage: { dbPath: "/data/db" } } 2015-09-25T17:22:27.350+0800 I NETWORK [initandlisten] waiting for connections on port 27017 2015-09-25T17:22:36.012+0800 I NETWORK [initandlisten] connection accepted from 127.0.0.1:37310 #1 (1 connection now open) # 該行表明一個(gè)來自本機(jī)的連接 ……省略信息……

    6.3 MongoDB連接命令格式

    使用用戶名和密碼連接到MongoDB服務(wù)器,你必須使用 'username:password@hostname/dbname' 格式,'username'為用戶名,'password' 為密碼。

    使用用戶名和密碼連接登陸到默認(rèn)數(shù)據(jù)庫:

    $ ./mongo MongoDB shell version: 3.0.6 connecting to: test mongodb://admin:123456@localhost/

    以上命令中,用戶 admin 使用密碼 123456 連接到本地的 MongoDB 服務(wù)上。輸出結(jié)果如下所示:<、p>

    > mongodb://admin:123456@localhost/ ...

    使用用戶名和密碼連接登陸到指定數(shù)據(jù)庫:

    連接到指定數(shù)據(jù)庫的格式如下:

    mongodb://admin:123456@localhost/test

    6.4 更多連接實(shí)例

    連接本地?cái)?shù)據(jù)庫服務(wù)器,端口是默認(rèn)的。

    mongodb://localhost

    使用用戶名fred,密碼foobar登錄localhost的admin數(shù)據(jù)庫。

    mongodb://fred:foobar@localhost

    使用用戶名fred,密碼foobar登錄localhost的baz數(shù)據(jù)庫。

    mongodb://fred:foobar@localhost/baz

    連接 replica pair, 服務(wù)器1為http://example1.com服務(wù)器2為example2。

    mongodb://example1.com:27017,http://example2.com:27017

    連接 replica set 三臺(tái)服務(wù)器 (端口 27017, 27018, 和27019):

    mongodb://localhost,localhost:27018,localhost:27019

    連接 replica set 三臺(tái)服務(wù)器, 寫入操作應(yīng)用在主服務(wù)器 并且分布查詢到從服務(wù)器。

    mongodb://host1,host2,host3/?slaveOk=true

    直接連接第一個(gè)服務(wù)器,無論是replica set一部分或者主服務(wù)器或者從服務(wù)器。

    mongodb://host1,host2,host3/?connect=direct;slaveOk=true

    當(dāng)你的連接服務(wù)器有優(yōu)先級(jí),還需要列出所有服務(wù)器,你可以使用上述連接方式。

    安全模式連接到localhost:

    mongodb://localhost/?safe=true

    以安全模式連接到replica set,并且等待至少兩個(gè)復(fù)制服務(wù)器成功寫入,超時(shí)時(shí)間設(shè)置為2秒。

    mongodb://host1,host2,host3/?safe=true;w=2;wtimeoutMS=2000

    6.5 參數(shù)選項(xiàng)說明

    標(biāo)準(zhǔn)格式:

    mongodb://[username:password@]host1:port1,...,hostN[:portN]][?options]]

    標(biāo)準(zhǔn)的連接格式包含了多個(gè)選項(xiàng)(options),如下所示:

    七、Mongodb的使用

    7.1 MongoDB 創(chuàng)建數(shù)據(jù)庫

    MongoDB 創(chuàng)建數(shù)據(jù)庫的語法格式如下:

    use DATABASE_NAME

    如果數(shù)據(jù)庫不存在,則創(chuàng)建數(shù)據(jù)庫,否則切換到指定數(shù)據(jù)庫。

    以下實(shí)例我們創(chuàng)建了數(shù)據(jù)庫 mongo:

    > use mongo switched to db mongo > db mongo >

    如果你想查看所有數(shù)據(jù)庫,可以使用 show dbs 命令:

    > show dbs local 0.078GB test 0.078GB >

    可以看到,我們剛創(chuàng)建的數(shù)據(jù)庫 mongo 并不在數(shù)據(jù)庫的列表中, 要顯示它,我們需要向 mongo 數(shù)據(jù)庫插入一些數(shù)據(jù)。

    > db.mongo.insert({"name":"mongodb中文網(wǎng)"}) WriteResult({ "nInserted" : 1 }) > show dbs local 0.078GB mongo 0.078GB test 0.078GB >

    MongoDB 中默認(rèn)的數(shù)據(jù)庫為 test,如果你沒有創(chuàng)建新的數(shù)據(jù)庫,集合將存放在 test 數(shù)據(jù)庫中。

    7.2 MongoDB 刪除數(shù)據(jù)庫

    MongoDB 刪除數(shù)據(jù)庫的語法格式如下:

    db.dropDatabase()

    刪除當(dāng)前數(shù)據(jù)庫,默認(rèn)為 test,你可以使用 db 命令查看當(dāng)前數(shù)據(jù)庫名。

    以下實(shí)例我們刪除了數(shù)據(jù)庫 mongo。

    首先,查看所有數(shù)據(jù)庫:

    > show dbs local 0.078GB mongo 0.078GB test 0.078GB

    接下來我們切換到數(shù)據(jù)庫 mongo

    > use runoob switched to db mongo >

    執(zhí)行刪除命令:

    > db.dropDatabase() { "dropped" : "runoob", "ok" : 1 }

    最后,我們?cè)偻ㄟ^ show dbs 命令數(shù)據(jù)庫是否刪除成功:

    > show dbs local 0.078GB test 0.078GB >

    集合刪除語法格式如下:

    db.collection.drop()

    7.3 MongoDB 插入文檔

    插入文檔

    MongoDB 使用 insert() 或 save() 方法向集合中插入文檔,語法如下:

    db.COLLECTION_NAME.insert(document)

    實(shí)例

    以下文檔可以存儲(chǔ)在 MongoDB 的 mongo 數(shù)據(jù)庫 的 col集合中:

    >db.col.insert({title: 'MongoDB 教程', description: 'MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫', by: 'MongoDB中文網(wǎng)', url: 'http://www.mongodb.org.cn', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 })

    以上實(shí)例中 col 是我們的集合名,前一章節(jié)我們已經(jīng)創(chuàng)建過了,如果該集合不在該數(shù)據(jù)庫中, MongoDB 會(huì)自動(dòng)創(chuàng)建該集合并插入文檔。

    查看已插入文檔:

    > db.col.find() { "_id" : ObjectId("56064886ade2f21f36b03134"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫", "by" : "MongoDB中文網(wǎng)", "url" : "http://www.mongodb.org.cn", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 } >

    我們也可以將數(shù)據(jù)定義為一個(gè)變量,如下所示:

    > document=({title: 'MongoDB 教程',description: 'MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫', by: 'Mongodb中文網(wǎng)', url: 'http://www.mongodb.org.cn', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 });

    執(zhí)行后顯示結(jié)果如下:

    { "title" : "MongoDB 教程", "description" : "MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫", "by" : "Mongodb中文網(wǎng)", "url" : "http://www.mongodb.org.cn", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }

    執(zhí)行插入操作:

    > db.col.insert(document) WriteResult({ "nInserted" : 1 }) >

    插入文檔你也可以使用 db.col.save(document) 命令。如果不指定 _id 字段 save() 方法類似于 insert() 方法。如果指定 _id 字段,則會(huì)更新該 _id 的數(shù)據(jù)。

    7.4 MongoDB 刪除文檔

    語法

    remove() 方法的基本語法格式如下所示:

    db.collection.remove( <query>, <justOne> )

    如果你的 MongoDB 是 2.6 版本以后的,語法格式如下:

    db.collection.remove( <query>, { justOne: <boolean>, writeConcern: <document> } )

    參數(shù)說明:

    • query :(可選)刪除的文檔的條件。
    • justOne : (可選)如果設(shè)為 true 或 1,則只刪除一個(gè)文檔。
    • writeConcern :(可選)拋出異常的級(jí)別。

    實(shí)例

    以下文檔我們執(zhí)行兩次插入操作:

    >db.col.insert({title: 'MongoDB 教程', description: 'MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫', by: 'MongoDB中文網(wǎng)', url: 'http://www.mongodb.org.cn', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 })

    使用 find() 函數(shù)查詢數(shù)據(jù):

    > db.col.find() { "_id" : ObjectId("56066169ade2f21f36b03137"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫", "by" : "MongoDB中文網(wǎng)", "url" : "http://www.mongodb.org.cn", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 } { "_id" : ObjectId("5606616dade2f21f36b03138"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫", "by" : "MongoDB中文網(wǎng)", "url" : "http://www.mongodb.org.cn", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }

    接下來我們移除 title 為 'MongoDB 教程' 的文檔:

    >db.col.remove({'title':'MongoDB 教程'}) WriteResult({ "nRemoved" : 2 }) # 刪除了兩條數(shù)據(jù) >db.col.find() …… # 沒有數(shù)據(jù)

    如果你只想刪除第一條找到的記錄可以設(shè)置 justOne 為 1,如下所示:

    >db.COLLECTION_NAME.remove(DELETION_CRITERIA,1)

    如果你想刪除所有數(shù)據(jù),可以使用以下方式(類似常規(guī) SQL 的 truncate 命令):

    >db.col.remove({}) >db.col.find() >

    7.5 MongoDB 更新文檔

    update() 方法

    update() 方法用于更新已存在的文檔。語法格式如下:

    db.collection.update( <query>, <update>, { upsert: <boolean>, multi: <boolean>, writeConcern: <document> } )

    參數(shù)說明:

    • query : update的查詢條件,類似sql update查詢內(nèi)where后面的。
    • update : update的對(duì)象和一些更新的操作符(如$,$inc...)等,也可以理解為sql update查詢內(nèi)set后面的
    • upsert : 可選,這個(gè)參數(shù)的意思是,如果不存在update的記錄,是否插入objNew,true為插入,默認(rèn)是false,不插入。
    • multi : 可選,mongodb 默認(rèn)是false,只更新找到的第一條記錄,如果這個(gè)參數(shù)為true,就把按條件查出來多條記錄全部更新。
    • writeConcern :可選,拋出異常的級(jí)別。

    實(shí)例

    我們?cè)诩?col 中插入如下數(shù)據(jù):

    >db.col.insert({ title: 'Mongodb 教程', description: 'MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫', by: 'Mongodb中文網(wǎng)', url: 'http://www.mongodb.org.cn', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 })

    接著我們通過 update() 方法來更新標(biāo)題(title):

    >db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) # 輸出信息 > db.col.find().pretty() { "_id" : ObjectId("56064f89ade2f21f36b03136"), "title" : "MongoDB", "description" : "MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫", "by" : "Mongodb中文網(wǎng)", "url" : "http://www.mongodb.org.cn", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 } >

    可以看到標(biāo)題(title)由原來的 "MongoDB 教程" 更新為了 "MongoDB"。

    以上語句只會(huì)修改第一條發(fā)現(xiàn)的文檔,如果你要修改多條相同的文檔,則需要設(shè)置 multi 參數(shù)為 true。

    >db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})

    save() 方法

    save() 方法通過傳入的文檔來替換已有文檔。語法格式如下:

    db.collection.save( <document>, { writeConcern: <document> } )

    參數(shù)說明:

    • document : 文檔數(shù)據(jù)。
    • writeConcern :可選,拋出異常的級(jí)別。

    實(shí)例

    以下實(shí)例中我們替換了 _id 為 56064f89ade2f21f36b03136 的文檔數(shù)據(jù):

    >db.col.save({ "_id" : ObjectId("56064f89ade2f21f36b03136"), "title" : "MongoDB", "description" : "MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫", "by" : "MongoDB中文網(wǎng)", "url" : "http://www.mongodb.org.cn", "tags" : [ "mongodb", "NoSQL" ], "likes" : 110 } )

    替換成功后,我們可以通過 find() 命令來查看替換后的數(shù)據(jù)

    >db.col.find().pretty() { "_id" : ObjectId("56064f89ade2f21f36b03136"), "title" : "MongoDB", "description" : "MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫", "by" : "Mongo", "url" : "http://www.mongodb.org.cn", "tags" : [ "mongodb", "NoSQL" ], "likes" : 110 } >

    更多實(shí)例

    只更新第一條記錄:

    db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );

    全部更新:

    db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );

    只添加第一條:

    db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );

    全部添加加進(jìn)去:

    db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );

    全部更新:

    db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );

    只更新第一條記錄:

    db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );

    更多mongodb操作查看 https://www.mongodb.org.cn/manual/>

    7.6 MongoDB 查詢文檔

    MongoDB 查詢文檔使用 find() 方法。

    find() 方法以非結(jié)構(gòu)化的方式來顯示所有文檔。

    語法

    MongoDB 查詢數(shù)據(jù)的語法格式如下:

    db.collection.find(query, projection)
    • query :可選,使用查詢操作符指定查詢條件
    • projection :可選,使用投影操作符指定返回的鍵。查詢時(shí)返回文檔中所有鍵值, 只需省略該參數(shù)即可(默認(rèn)省略)。

    如果你需要以易讀的方式來讀取數(shù)據(jù),可以使用 pretty() 方法,語法格式如下:

    >db.col.find().pretty()

    pretty() 方法以格式化的方式來顯示所有文檔。

    實(shí)例

    以下實(shí)例我們查詢了集合 col 中的數(shù)據(jù):

    > db.col.find().pretty() {"_id" : ObjectId("56063f17ade2f21f36b03133"),"title" : "MongoDB 教程","description" : "MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫","by" : "菜鳥教程","url" : "http://www.runoob.com","tags" : ["mongodb","database","NoSQL"],"likes" : 100 }

    除了 find() 方法之外,還有一個(gè) findOne() 方法,它只返回一個(gè)文檔。

    7.6.1 MongoDB 與 RDBMS Where 語句比較

    如果你熟悉常規(guī)的 SQL 數(shù)據(jù),通過下表可以更好的理解 MongoDB 的條件語句查詢:

    7.6.2 MongoDB AND 條件

    MongoDB 的 find() 方法可以傳入多個(gè)鍵(key),每個(gè)鍵(key)以逗號(hào)隔開,即常規(guī) SQL 的 AND 條件。

    語法格式如下:

    >db.col.find({key1:value1, key2:value2}).pretty()

    實(shí)例

    以下實(shí)例通過 by 和 title 鍵來查詢 菜鳥教程 中 MongoDB 教程 的數(shù)據(jù)

    > db.col.find({"by":"菜鳥教程", "title":"MongoDB 教程"}).pretty() {"_id" : ObjectId("56063f17ade2f21f36b03133"),"title" : "MongoDB 教程","description" : "MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫","by" : "菜鳥教程","url" : "http://www.runoob.com","tags" : ["mongodb","database","NoSQL"],"likes" : 100 }

    以上實(shí)例中類似于 WHERE 語句:WHERE by='菜鳥教程' AND title='MongoDB 教程'

    7.6.3 MongoDB OR 條件

    MongoDB OR 條件語句使用了關(guān)鍵字 $or,語法格式如下:

    >db.col.find({$or: [{key1: value1}, {key2:value2}]} ).pretty()

    實(shí)例

    以下實(shí)例中,我們演示了查詢鍵 by 值為 菜鳥教程 或鍵 title 值為 MongoDB 教程 的文檔。

    >db.col.find({$or:[{"by":"菜鳥教程"},{"title": "MongoDB 教程"}]}).pretty() {"_id" : ObjectId("56063f17ade2f21f36b03133"),"title" : "MongoDB 教程","description" : "MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫","by" : "菜鳥教程","url" : "http://www.runoob.com","tags" : ["mongodb","database","NoSQL"],"likes" : 100 } >

    AND 和 OR 聯(lián)合使用

    以下實(shí)例演示了 AND 和 OR 聯(lián)合使用,類似常規(guī) SQL 語句為: 'where likes>50 AND (by = '菜鳥教程' OR title = 'MongoDB 教程')'

    >db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鳥教程"},{"title": "MongoDB 教程"}]}).pretty() {"_id" : ObjectId("56063f17ade2f21f36b03133"),"title" : "MongoDB 教程","description" : "MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫","by" : "菜鳥教程","url" : "http://www.runoob.com","tags" : ["mongodb","database","NoSQL"],"likes" : 100 }

    7.7 MongoDB 條件操作符

    描述

    條件操作符用于比較兩個(gè)表達(dá)式并從mongoDB集合中獲取數(shù)據(jù)。

    在本章節(jié)中,我們將討論如何在MongoDB中使用條件操作符。

    MongoDB中條件操作符有:

    • (>) 大于 - $gt
    • (<) 小于 - $lt
    • (>=) 大于等于 - $gte
    • (<= ) 小于等于 - $lte

    我們使用的數(shù)據(jù)庫名稱為"runoob" 我們的集合名稱為"col",以下為我們插入的數(shù)據(jù)。

    為了方便測(cè)試,我們可以先使用以下命令清空集合 "col" 的數(shù)據(jù):

    db.col.remove({})

    插入以下數(shù)據(jù)

    >db.col.insert({title: 'PHP 教程', description: 'PHP 是一種創(chuàng)建動(dòng)態(tài)交互性站點(diǎn)的強(qiáng)有力的服務(wù)器端腳本語言。',by: '菜鳥教程',url: 'http://www.runoob.com',tags: ['php'],likes: 200 }) >db.col.insert({title: 'Java 教程', description: 'Java 是由Sun Microsystems公司于1995年5月推出的高級(jí)程序設(shè)計(jì)語言。',by: '菜鳥教程',url: 'http://www.runoob.com',tags: ['java'],likes: 150 }) >db.col.insert({title: 'MongoDB 教程', description: 'MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫',by: '菜鳥教程',url: 'http://www.runoob.com',tags: ['mongodb'],likes: 100 })

    使用find()命令查看數(shù)據(jù):

    > db.col.find() { "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是一種創(chuàng)建動(dòng)態(tài)交互性站點(diǎn)的強(qiáng)有力的服務(wù)器端腳本語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "php" ], "likes" : 200 } { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高級(jí)程序設(shè)計(jì)語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 } { "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 }

    7.7.1 MongoDB (>) 大于操作符 - $gt

    如果你想獲取 "col" 集合中 "likes" 大于 100 的數(shù)據(jù),你可以使用以下命令:

    db.col.find({likes : {$gt : 100}})

    類似于SQL語句:

    Select * from col where likes > 100;

    輸出結(jié)果:

    > db.col.find({likes : {$gt : 100}}) { "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是一種創(chuàng)建動(dòng)態(tài)交互性站點(diǎn)的強(qiáng)有力的服務(wù)器端腳本語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "php" ], "likes" : 200 } { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高級(jí)程序設(shè)計(jì)語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 } >

    7.7.2 MongoDB(>=)大于等于操作符 - $gte

    如果你想獲取"col"集合中 "likes" 大于等于 100 的數(shù)據(jù),你可以使用以下命令:

    db.col.find({likes : {$gte : 100}})

    類似于SQL語句:

    Select * from col where likes >=100;

    輸出結(jié)果:

    > db.col.find({likes : {$gte : 100}}) { "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是一種創(chuàng)建動(dòng)態(tài)交互性站點(diǎn)的強(qiáng)有力的服務(wù)器端腳本語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "php" ], "likes" : 200 } { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高級(jí)程序設(shè)計(jì)語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 } { "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 } >

    7.7.3 MongoDB (<) 小于操作符 - $lt

    如果你想獲取"col"集合中 "likes" 小于 150 的數(shù)據(jù),你可以使用以下命令:

    db.col.find({likes : {$lt : 150}})

    類似于SQL語句:

    Select * from col where likes < 150;

    輸出結(jié)果:

    > db.col.find({likes : {$lt : 150}}) { "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 }

    7.7.4 MongoDB (<=) 小于等于操作符 - $lte

    如果你想獲取"col"集合中 "likes" 小于等于 150 的數(shù)據(jù),你可以使用以下命令:

    db.col.find({likes : {$lte : 150}})

    類似于SQL語句:

    Select * from col where likes <= 150;

    輸出結(jié)果:

    > db.col.find({likes : {$lte : 150}}) { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高級(jí)程序設(shè)計(jì)語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 } { "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 }

    7.7.5 MongoDB 使用 (<) 和 (>) 查詢 - $lt 和 $gt

    如果你想獲取"col"集合中 "likes" 大于100,小于 200 的數(shù)據(jù),你可以使用以下命令:

    db.col.find({likes : {$lt :200, $gt : 100}})

    類似于SQL語句:

    Select * from col where likes>100 AND likes<200;

    輸出結(jié)果:

    > db.col.find({likes : {$lt :200, $gt : 100}}) { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高級(jí)程序設(shè)計(jì)語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 } >

    7.8 MongoDB $type 操作符

    描述

    在本章節(jié)中,我們將繼續(xù)討論MongoDB中條件操作符 $type。

    $type操作符是基于BSON類型來檢索集合中匹配的數(shù)據(jù)類型,并返回結(jié)果。

    MongoDB 中可以使用的類型如下表所示:

    我們使用的數(shù)據(jù)庫名稱為"runoob" 我們的集合名稱為"col",以下為我們插入的數(shù)據(jù)。

    簡(jiǎn)單的集合"col":

    >db.col.insert({title: 'PHP 教程', description: 'PHP 是一種創(chuàng)建動(dòng)態(tài)交互性站點(diǎn)的強(qiáng)有力的服務(wù)器端腳本語言。',by: '菜鳥教程',url: 'http://www.runoob.com',tags: ['php'],likes: 200 }) >db.col.insert({title: 'Java 教程', description: 'Java 是由Sun Microsystems公司于1995年5月推出的高級(jí)程序設(shè)計(jì)語言。',by: '菜鳥教程',url: 'http://www.runoob.com',tags: ['java'],likes: 150 }) >db.col.insert({title: 'MongoDB 教程', description: 'MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫',by: '菜鳥教程',url: 'http://www.runoob.com',tags: ['mongodb'],likes: 100 })

    使用find()命令查看數(shù)據(jù):

    > db.col.find() { "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是一種創(chuàng)建動(dòng)態(tài)交互性站點(diǎn)的強(qiáng)有力的服務(wù)器端腳本語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "php" ], "likes" : 200 } { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高級(jí)程序設(shè)計(jì)語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 } { "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 }

    MongoDB 操作符 - $type 實(shí)例

    如果想獲取 "col" 集合中 title 為 String 的數(shù)據(jù),你可以使用以下命令:

    db.col.find({"title" : {$type : 2}}) 或 db.col.find({"title" : {$type : 'string'}})

    輸出結(jié)果為:

    { "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是一種創(chuàng)建動(dòng)態(tài)交互性站點(diǎn)的強(qiáng)有力的服務(wù)器端腳本語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "php" ], "likes" : 200 } { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高級(jí)程序設(shè)計(jì)語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 } { "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 }

    7.9 MongoDB Limit與Skip方法

    7.9.1 MongoDB Limit() 方法

    如果你需要在MongoDB中讀取指定數(shù)量的數(shù)據(jù)記錄,可以使用MongoDB的Limit方法,limit()方法接受一個(gè)數(shù)字參數(shù),該參數(shù)指定從MongoDB中讀取的記錄條數(shù)。

    語法

    limit()方法基本語法如下所示:

    >db.COLLECTION_NAME.find().limit(NUMBER)

    實(shí)例

    集合 col 中的數(shù)據(jù)如下:

    { "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是一種創(chuàng)建動(dòng)態(tài)交互性站點(diǎn)的強(qiáng)有力的服務(wù)器端腳本語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "php" ], "likes" : 200 } { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高級(jí)程序設(shè)計(jì)語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 } { "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 }

    以下實(shí)例為顯示查詢文檔中的兩條記錄:

    > db.col.find({},{"title":1,_id:0}).limit(2) { "title" : "PHP 教程" } { "title" : "Java 教程" } >

    注:如果你們沒有指定limit()方法中的參數(shù)則顯示集合中的所有數(shù)據(jù)。

    7.9.2 MongoDB Skip() 方法

    我們除了可以使用limit()方法來讀取指定數(shù)量的數(shù)據(jù)外,還可以使用skip()方法來跳過指定數(shù)量的數(shù)據(jù),skip方法同樣接受一個(gè)數(shù)字參數(shù)作為跳過的記錄條數(shù)。

    語法

    skip() 方法腳本語法格式如下:

    >db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)

    實(shí)例

    以下實(shí)例只會(huì)顯示第二條文檔數(shù)據(jù)

    >db.col.find({},{"title":1,_id:0}).limit(1).skip(1) { "title" : "Java 教程" } >

    注:skip()方法默認(rèn)參數(shù)為 0 。

    8.0 MongoDB 排序

    MongoDB sort() 方法

    在 MongoDB 中使用 sort() 方法對(duì)數(shù)據(jù)進(jìn)行排序,sort() 方法可以通過參數(shù)指定排序的字段,并使用 1 和 -1 來指定排序的方式,其中 1 為升序排列,而 -1 是用于降序排列。

    語法

    sort()方法基本語法如下所示:

    >db.COLLECTION_NAME.find().sort({KEY:1})

    實(shí)例

    col 集合中的數(shù)據(jù)如下:

    { "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是一種創(chuàng)建動(dòng)態(tài)交互性站點(diǎn)的強(qiáng)有力的服務(wù)器端腳本語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "php" ], "likes" : 200 } { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高級(jí)程序設(shè)計(jì)語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 } { "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 }

    以下實(shí)例演示了 col 集合中的數(shù)據(jù)按字段 likes 的降序排列:

    >db.col.find({},{"title":1,_id:0}).sort({"likes":-1}) { "title" : "PHP 教程" } { "title" : "Java 教程" } { "title" : "MongoDB 教程" } >

    八、 MongoDB 之spring-mvc整合

    參考https://blog.csdn.net/hh12211221/article/details/77717364文章

    九、 MongoDB 之springboot整合

    9.1 導(dǎo)入依賴

    <dependencies><!--spring-boot起步依賴--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency><!--實(shí)體--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.18</version></dependency> </dependencies>

    9.2 配置文件

    spring.application.name=mongodb_demo server.port=8080 ? ? spring.data.mongodb.uri=mongodb://localhost:27017/test

    9.3 DAO層

    package com.hellojava.dao; ? ? ? import com.hellojava.model.MongoTest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Update; import org.springframework.stereotype.Component; ? @Component public class MongoTestDao { ? ?@Autowiredprivate MongoTemplate mongoTemplate; ?/*** 創(chuàng)建對(duì)象*/public void saveTest(MongoTest test) {mongoTemplate.save(test);} ?/*** 根據(jù)用戶名查詢對(duì)象* @return*/public MongoTest findTestByName(String name) {Query query=new Query(Criteria.where("name").is(name));MongoTest mgt = mongoTemplate.findOne(query , MongoTest.class);return mgt;} ?/*** 更新對(duì)象*/public void updateTest(MongoTest test) {Query query=new Query(Criteria.where("id").is(test.getId()));Update update= new Update().set("age", test.getAge()).set("name", test.getName());//更新查詢返回結(jié)果集的第一條mongoTemplate.updateFirst(query,update,MongoTest.class);//更新查詢返回結(jié)果集的所有// mongoTemplate.updateMulti(query,update,TestEntity.class);} ?/*** 刪除對(duì)象* @param id*/public void deleteTestById(Integer id) {Query query=new Query(Criteria.where("id").is(id));mongoTemplate.remove(query,MongoTest.class);} }

    總結(jié)

    以上是生活随笔為你收集整理的mongodb连接失败_MongoDB 基础入门的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 精品亚洲一区二区三区 | 三级视频在线看 | 一区二区免费在线播放 | gav在线| 国产 第1190页 | 亚洲jizzjizz日本少妇 | 黄色1级片 | 豆国产97在线 | 亚洲 | 白丝女仆被免费网站 | 最新免费av网站 | 最新理伦片eeuss影院 | 阿拉伯性视频xxxx | 性xxx欧美 | 国产9区 | 日本人jizz| 亚洲日本一区二区三区 | 欧洲久久久久久 | 中文字幕午夜 | 亚洲第一黄色 | 欧美日韩精品国产 | 相亲对象是问题学生动漫免费观看 | 色呦呦在线看 | 色偷偷影院 | 亚洲免费影院 | 日韩有码专区 | 淫视频网站 | 99亚洲视频 | 丁香一区二区 | 夜夜导航 | 一级特级黄色片 | 20日本xxxxxxxxx46 欧美激情一级 | 色婷婷免费 | www激情 | 福利网址在线 | 91小宝寻花一区二区三区 | 亚洲h视频在线观看 | 婷婷一区二区三区四区 | 熟妇人妻av无码一区二区三区 | 国产精品毛片一区二区 | 成人动漫免费在线观看 | 免费av网页| 国产精品高清网站 | 美女又爽又黄又免费 | 香蕉视频黄色 | 亚洲一区二区三区久久久成人动漫 | 亚洲码欧美码一区二区三区 | 日本一区电影 | 91手机视频在线观看 | 捆绑japanhdxxxxvideos | 啪啪免费 | 无码久久精品国产亚洲av影片 | 国产在线久久久 | 国产三级精品三级 | 成年女人免费视频 | 中文字幕乱码在线人视频 | 91碰在线视频 | 国产亚洲精品久久久久久久 | 人人草人人射 | 黄色片a| 国产主播一区二区 | 欧美一区2区三区4区公司 | 国产精品久久久久久久久久免费看 | 久久久久看片 | 美女隐私免费网站 | 一区二区导航 | 尤物在线观看视频 | 国内精品久久久久久久影视简单 | 国产成人在线视频免费观看 | 成人网久久 | 草久久免费视频 | 高h大肚孕期孕妇play | 亚洲小说在线 | 男人天堂视频网 | 国产乱码精品一区二区三区中文 | 豆花在线观看 | 日韩av手机在线观看 | www奇米影视com | 人人草人人爽 | 岛国精品一区二区 | 久久久夜精品 | 黄色一级视频免费观看 | 九七人人爽 | 久久久国产网站 | 国产精品视频久久久 | 亚洲人妖在线 | 亚洲国产成人综合 | 开心春色激情网 | 妖精视频在线观看 | 五月天综合网站 | 肉嫁高柳家在线看 | 中出精品| 91人人草 | 国产大片b站 | 麻豆av一区二区三区在线观看 | 日韩黄色一区 | 尤物视频一区 | 欧美成人做爰猛烈床戏 | 美女午夜激情 | 国产精品一区二区入口九绯色 |