mongodb连接失败_MongoDB 基础入门
mongodb
一、NoSQL 簡介
NoSQL(NoSQL = Not Only SQL ),意即"不僅僅是SQL"。
在現代的計算系統上每天網絡上都會產生龐大的數據量。
這些數據有很大一部分是由關系數據庫管理系統(RDMBSs)來處理。 1970年 E.F.Codd's提出的關系模型的論文 "A relational model of data for large shared data banks",這使得數據建模和應用程序編程更加簡單。
通過應用實踐證明,關系模型是非常適合于客戶服務器編程,遠遠超出預期的利益,今天它是結構化數據存儲在網絡和商務應用的主導技術。
NoSQL 是一項全新的數據庫革命性運動,早期就有人提出,發展至2009年趨勢越發高漲。NoSQL的擁護者們提倡運用非關系型的數據存儲,相對于鋪天蓋地的關系型數據庫運用,這一概念無疑是一種全新的思維的注入。
1.1 關系型數據庫遵循ACID規則
事務在英文中是transaction,和現實世界中的交易很類似,它有如下四個特性:
1、A (Atomicity) 原子性 原子性很容易理解,也就是說事務里的所有操作要么全部做完,要么都不做,事務成功的條件是事務里的所有操作都成功,只要有一個操作失敗,整個事務就失敗,需要回滾。
比如銀行轉賬,從A賬戶轉100元至B賬戶,分為兩個步驟:1)從A賬戶取100元;2)存入100元至B賬戶。這兩步要么一起完成,要么一起不完成,如果只完成第一步,第二步失敗,錢會莫名其妙少了100元。
2、C (Consistency) 一致性 一致性也比較容易理解,也就是說數據庫要一直處于一致的狀態,事務的運行不會改變數據庫原本的一致性約束。
例如現有完整性約束a+b=10,如果一個事務改變了a,那么必須得改變b,使得事務結束后依然滿足a+b=10,否則事務失敗。
3、I (Isolation) 獨立性 所謂的獨立性是指并發的事務之間不會互相影響,如果一個事務要訪問的數據正在被另外一個事務修改,只要另外一個事務未提交,它所訪問的數據就不受未提交事務的影響。 比如現有有個交易是從A賬戶轉100元至B賬戶,在這個交易還未完成的情況下,如果此時B查詢自己的賬戶,是看不到新增加的100元的。
4、D (Durability) 持久性 持久性是指一旦事務提交后,它所做的修改將會永久的保存在數據庫上,即使出現宕機也不會丟失。
1.2 分布式系統
分布式系統(distributed system)由多臺計算機和通信的軟件組件通過計算機網絡連接(本地網絡或廣域網)組成。
分布式系統是建立在網絡之上的軟件系統。正是因為軟件的特性,所以分布式系統具有高度的內聚性和透明性。
因此,網絡和分布式系統之間的區別更多的在于高層軟件(特別是操作系統),而不是硬件。
分布式系統可以應用在在不同的平臺上如:Pc、工作站、局域網和廣域網上等。
1.3 分布式計算的優點
可靠性(容錯) : 分布式計算系統中的一個重要的優點是可靠性。一臺服務器的系統崩潰并不影響到其余的服務器。
可擴展性: 在分布式計算系統可以根據需要增加更多的機器。
資源共享: 共享數據是必不可少的應用,如銀行,預訂系統。
靈活性: 由于該系統是非常靈活的,它很容易安裝,實施和調試新的服務。
更快的速度: 分布式計算系統可以有多臺計算機的計算能力,使得它比其他系統有更快的處理速度。
開放系統: 由于它是開放的系統,本地或者遠程都可以訪問到該服務。
更高的性能: 相較于集中式計算機網絡集群可以提供更高的性能(及更好的性價比)。
1.4分布式計算的缺點
故障排除: : 故障排除和診斷問題。
軟件: 更少的軟件支持是分布式計算系統的主要缺點。
網絡: 網絡基礎設施的問題,包括:傳輸問題,高負載,信息丟失等。
安全性: 開發系統的特性讓分布式計算系統存在著數據的安全性和共享的風險等問題。
什么是NoSQL?
NoSQL,指的是非關系型的數據庫。NoSQL有時也稱作Not Only SQL的縮寫,是對不同于傳統的關系型數據庫的數據庫管理系統的統稱。
NoSQL用于超大規模數據的存儲。(例如谷歌或Facebook每天為他們的用戶收集萬億比特的數據)。這些類型的數據存儲不需要固定的模式,無需多余操作就可以橫向擴展。
為什么使用NoSQL ?
今天我們可以通過第三方平臺(如:Google,Facebook等)可以很容易的訪問和抓取數據。用戶的個人信息,社交網絡,地理位置,用戶生成的數據和用戶操作日志已經成倍的增加。我們如果要對這些用戶數據進行挖掘,那SQL數據庫已經不適合這些應用了, NoSQL數據庫的發展也卻能很好的處理這些大的數據。
實例
社會化關系網:
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
- 高度組織化結構化數據
- 結構化查詢語言(SQL) (SQL)
- 數據和關系都存儲在單獨的表中。
- 數據操縱語言,數據定義語言
- 嚴格的一致性
- 基礎事務
NoSQL
- 代表著不僅僅是SQL
- 沒有聲明性查詢語言
- 沒有預定義的模式 -鍵 - 值對存儲,列存儲,文檔存儲,圖形數據庫
- 最終一致性,而非ACID屬性
- 非結構化和不可預知的數據
- CAP定理
- 高性能,高可用性和可伸縮性
NoSQL 簡史
NoSQL一詞最早出現于1998年,是Carlo Strozzi開發的一個輕量、開源、不提供SQL功能的關系數據庫。
2009年,Last.fm的Johan Oskarsson發起了一次關于分布式開源數據庫的討論[2],來自Rackspace的Eric Evans再次提出了NoSQL的概念,這時的NoSQL主要指非關系型、分布式、不提供ACID的數據庫設計模式。
2009年在亞特蘭大舉行的"no:sql(east)"討論會是一個里程碑,其口號是"select fun, profit from real_world where relational=false;"。因此,對NoSQL最普遍的解釋是"非關聯型的",強調Key-Value Stores和文檔數據庫的優點,而不是單純的反對RDBMS。
CAP定理(CAP theorem)
在計算機科學中, CAP定理(CAP theorem), 又被稱作 布魯爾定理(Brewer's theorem), 它指出對于一個分布式計算系統來說,不可能同時滿足以下三點:
- 一致性(Consistency) (所有節點在同一時間具有相同的數據)
- 可用性(Availability) (保證每個請求不管成功或者失敗都有響應)
- 分隔容忍(Partition tolerance) (系統中任意信息的丟失或失敗不會影響系統的繼續運作)
CAP理論的核心是:一個分布式系統不可能同時很好的滿足一致性,可用性和分區容錯性這三個需求,最多只能同時較好的滿足兩個。
因此,根據 CAP 原理將 NoSQL 數據庫分成了滿足 CA 原則、滿足 CP 原則和滿足 AP 原則三 大類:
- CA - 單點集群,滿足一致性,可用性的系統,通常在可擴展性上不太強大。
- CP - 滿足一致性,分區容忍必的系統,通常性能不是特別高。
- AP - 滿足可用性,分區容忍性的系統,通常可能對一致性要求低一些。
NoSQL的優點/缺點
優點:
- - 高可擴展性
- - 分布式計算
- - 低成本
- - 架構的靈活性,半結構化數據
- - 沒有復雜的關系
缺點:
- - 沒有標準化
- - 有限的查詢功能(到目前為止)
- - 最終一致是不直觀的程序
BASE
BASE:Basically Available, Soft-state, Eventually Consistent。 由 Eric Brewer 定義。
CAP理論的核心是:一個分布式系統不可能同時很好的滿足一致性,可用性和分區容錯性這三個需求,最多只能同時較好的滿足兩個。
BASE是NoSQL數據庫通常對可用性及一致性的弱要求原則:
- Basically Availble --基本可用
- Soft-state --軟狀態/柔性事務。 "Soft state" 可以理解為"無連接"的, 而 "Hard state" 是"面向連接"的
- Eventual Consistency --最終一致性 最終一致性, 也是是 ACID 的最終目的。
ACID vs BASE
ACIDBASE原子性(Atomicity)基本可用(Basically Available)一致性(Consistency)軟狀態/柔性事務(Soft state)隔離性(Isolation)最終一致性 (Eventual consistency)持久性 (Durable)
NoSQL 數據庫分類
類型部分代表特點列存儲HbaseCassandraHypertable顧名思義,是按列存儲數據的。最大的特點是方便存儲結構化和半結構化數據,方便做數據壓縮,對針對某一列或者某幾列的查詢有非常大的IO優勢。文檔存儲MongoDBCouchDB文檔存儲一般用類似json的格式存儲,存儲的內容是文檔型的。這樣也就有有機會對某些字段建立索引,實現關系數據庫的某些功能。key-value存儲Tokyo Cabinet / TyrantBerkeley DBMemcacheDBRedis可以通過key快速查詢到其value。一般來說,存儲不管value的格式,照單全收。(Redis包含了其他功能)圖存儲Neo4JFlockDB圖形關系的最佳存儲。使用傳統關系數據庫來解決的話性能低下,而且設計使用不方便。對象存儲db4oVersant通過類似面向對象語言的語法操作數據庫,通過對象的方式存取數據。xml數據庫Berkeley DB XMLBaseX高效的存儲XML數據,并支持XML的內部查詢語法,比如XQuery,Xpath。
二、MongoDB 概念解析
不管我們學習什么數據庫都應該學習其中的基礎概念,在mongodb中基本的概念是文檔、集合、數據庫,下面我們挨個介紹。
下表將幫助您更容易理解Mongo中的一些概念:
SQL術語/概念MongoDB術語/概念解釋/說明databasedatabase數據庫tablecollection數據庫表/集合rowdocument數據記錄行/文檔columnfield數據字段/域indexindex索引table joins表連接,MongoDB不支持primary keyprimary key主鍵,MongoDB自動將_id字段設置為主鍵
通過下圖實例,我們也可以更直觀的的了解Mongo中的一些概念:
2.1 數據庫
一個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 >執行 "db" 命令可以顯示當前數據庫對象或集合。
$ ./mongo MongoDB shell version: 3.0.6 connecting to: test > db test >運行"use"命令,可以連接到一個指定的數據庫。
> use local switched to db local > db local >以上實例命令中,"local" 是你要鏈接的數據庫。
在下一個章節我們將詳細講解MongoDB中命令的使用。
數據庫也通過名字來標識。數據庫名可以是滿足以下條件的任意UTF-8字符串。
- 不能是空字符串("")。
- 不得含有' '(空格)、.、$、/、和0 (空宇符)。
- 應全部小寫。
- 最多64字節。
有一些數據庫名是保留的,可以直接訪問這些有特殊作用的數據庫。
- admin: 從權限的角度來看,這是"root"數據庫。要是將一個用戶添加到這個數據庫,這個用戶自動繼承所有數據庫的權限。一些特定的服務器端命令也只能從這個數據庫運行,比如列出所有的數據庫或者關閉服務器。
- local: 這個數據永遠不會被復制,可以用來存儲限于本地單臺服務器的任意集合
- config: 當Mongo用于分片設置時,config數據庫在內部使用,用于保存分片的相關信息。
2.2 文檔
文檔是一個鍵值(key-value)對(即BSON)。MongoDB 的文檔不需要設置相同的字段,并且相同的字段不需要相同的數據類型,這與關系型數據庫有很大的區別,也是 MongoDB 非常突出的特點。
一個簡單的文檔例子如下:
{"site":"www.runoob.com", "name":"菜鳥教程"}下表列出了 RDBMS 與 MongoDB 對應的術語:
需要注意的是:
文檔鍵命名規范:
- 鍵不能含有0 (空字符)。這個字符用來表示鍵的結尾。
- .和$有特別的意義,只有在特定環境下才能使用。
- 以下劃線"_"開頭的鍵是保留的(不是嚴格要求的)。
2.3 集合
集合就是 MongoDB 文檔組,類似于 RDBMS (關系數據庫管理系統:Relational Database Management System)中的表格。
集合存在于數據庫中,集合沒有固定的結構,這意味著你在對集合可以插入不同格式和類型的數據,但通常情況下我們插入集合的數據都會有一定的關聯性。
比如,我們可以將以下不同數據結構的文檔插入到集合中:
{"site":"www.baidu.com"} {"site":"www.google.com","name":"Google"} {"site":"www.runoob.com","name":"菜鳥教程","num":5}當第一個文檔插入時,集合就會被創建。
合法的集合名
- 集合名不能是空字符串""。
- 集合名不能含有0字符(空字符),這個字符表示集合名的結尾。
- 集合名不能以"system."開頭,這是為系統集合保留的前綴。
- 用戶創建的集合名字不能含有保留字符。有些驅動程序的確支持在集合名里面包含,這是因為某些系統生成的集合中包含該字符。除非你要訪問這種系統創建的集合,否則千萬不要在名字里出現$。
如下實例:
db.col.findOne()capped collections
Capped collections 就是固定大小的collection。
它有很高的性能以及隊列過期的特性(過期按照插入的順序). 有點和 "RRD" 概念類似。
Capped collections是高性能自動的維護對象的插入順序。它非常適合類似記錄日志的功能 和標準的collection不同,你必須要顯式的創建一個capped collection, 指定一個collection的大小,單位是字節。collection的數據存儲空間值提前分配的。
要注意的是指定的存儲大小包含了數據庫的頭信息。
db.createCollection("mycoll", {capped:true, size:100000})- 在capped collection中,你能添加新的對象。
- 能進行更新,然而,對象不會增加存儲空間。如果增加,更新就會失敗 。
- 數據庫不允許進行刪除。使用drop()方法刪除collection所有的行。
- 注意: 刪除之后,你必須顯式的重新創建這個collection。
- 在32bit機器中,capped collection最大存儲為1e9( 1X109)個字節。
2.4 元數據
數據庫的信息是存儲在集合中。它們使用了系統的命名空間:
dbname.system.*在MongoDB數據庫中名字空間 <dbname>.system.* 是包含多種系統信息的特殊集合(Collection),如下:
對于修改系統集合中的對象有如下限制。
在{{system.indexes}}插入數據,可以創建索引。但除此之外該表信息是不可變的(特殊的drop index命令將自動更新相關信息)。
{{system.users}}是可修改的。 {{system.profile}}是可刪除的。
2.5 MongoDB 數據類型
下表為MongoDB中常用的幾種數據類型。
三、什么是MongoDB ?
MongoDB 是由C++語言編寫的,是一個基于分布式文件存儲的開源數據庫系統。
在高負載的情況下,添加更多的節點,可以保證服務器性能。
MongoDB 旨在為WEB應用提供可擴展的高性能數據存儲解決方案。
MongoDB 將數據存儲為一個文檔,數據結構由鍵值(key=>value)對組成。MongoDB 文檔類似于 JSON 對象。字段值可以包含其他文檔,數組及文檔數組。
主要特點
- MongoDB的提供了一個面向文檔存儲,操作起來比較簡單和容易。
- 你可以在MongoDB記錄中設置任何屬性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")來實現更快的排序。
- 你可以通過本地或者網絡創建數據鏡像,這使得MongoDB有更強的擴展性。
- 如果負載的增加(需要更多的存儲空間和更強的處理能力) ,它可以分布在計算機網絡中的其他節點上這就是所謂的分片。
- Mongo支持豐富的查詢表達式。查詢指令使用JSON形式的標記,可輕易查詢文檔中內嵌的對象及數組。
- MongoDb 使用update()命令可以實現替換完成的文檔(數據)或者一些指定的數據字段 。
- Mongodb中的Map/reduce主要是用來對數據進行批量處理和聚合操作。
- Map和Reduce。Map函數調用emit(key,value)遍歷集合中所有的記錄,將key與value傳給Reduce函數進行處理。
- Map函數和Reduce函數是使用Javascript編寫的,并可以通過db.runCommand或mapreduce命令來執行MapReduce操作。
- GridFS是MongoDB中的一個內置功能,可以用于存放大量小文件。
- MongoDB允許在服務端執行腳本,可以用Javascript編寫某個函數,直接在服務端執行,也可以把函數的定義存儲在服務端,下次直接調用即可。
- MongoDB支持各種編程語言:RUBY,PYTHON,JAVA,C++,PHP,C#等多種語言。
- MongoDB安裝簡單。
歷史 2007年10月,MongoDB由10gen團隊所發展。2009年2月首度推出。
- 2012年05月23日,MongoDB2.1 開發分支發布了! 該版本采用全新架構,包含諸多增強。
- 2012年06月06日,MongoDB 2.0.6 發布,分布式文檔數據庫。
- 2013年04月23日,MongoDB 2.4.3 發布,此版本包括了一些性能優化,功能增強以及bug修復。
- 2013年08月20日,MongoDB 2.4.6 發布,是目前最新的穩定版。
MongoDB 下載
你可以在mongodb官網下載該安裝包,地址為: http://www.mongodb.org/downloads。MonggoDB支持以下平臺:
- 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的管理工具。
監控
MongoDB提供了網絡和系統監控工具Munin,它作為一個插件應用于MongoDB中。
Gangila是MongoDB高性能的系統監視的工具,它作為一個插件應用于MongoDB中。
基于圖形界面的開源工具 Cacti, 用于查看CPU負載, 網絡帶寬利用率,它也提供了一個應用于監控 MongoDB 的插件。
GUI
- Fang of Mongo – 網頁式,由Django和jQuery所構成。
- Futon4Mongo – 一個CouchDB Futon web的mongodb山寨版。
- Mongo3 – Ruby寫成。
- MongoHub – 適用于OSX的應用程序。
- Opricot – 一個基于瀏覽器的MongoDB控制臺, 由PHP撰寫而成。
- Database Master — Windows的mongodb管理工具
- RockMongo — 最好的PHP語言的MongoDB管理工具,輕量級, 支持多國語言.
MongoDB 應用案例
下面列舉一些公司MongoDB的實際應用:
- Craiglist上使用MongoDB的存檔數十億條記錄。
- FourSquare,基于位置的社交網站,在Amazon EC2的服務器上使用MongoDB分享數據。
- Shutterfly,以互聯網為基礎的社會和個人出版服務,使用MongoDB的各種持久性數據存儲的要求。
- bit.ly, 一個基于Web的網址縮短服務,使用MongoDB的存儲自己的數據。
- http://spike.com,一個MTV網絡的聯營公司, http://spike.com使用MongoDB的。
- Intuit公司,一個為小企業和個人的軟件和服務提供商,為小型企業使用MongoDB的跟蹤用戶的數據。
- http://sourceforge.net,資源網站查找,創建和發布開源軟件免費,使用MongoDB的后端存儲。
- http://etsy.com ,一個購買和出售手工制作物品網站,使用MongoDB。
- 紐約時報,領先的在線新聞門戶網站之一,使用MongoDB。
- CERN,著名的粒子物理研究所,歐洲核子研究中心大型強子對撞機的數據使用MongoDB。
四、MongoDB的安裝
4.1 window平臺安裝 MongoDB
MongoDB 提供了可用于 32 位和 64 位系統的預編譯二進制包,你可以從MongoDB官網下載安裝,MongoDB 預編譯二進制包下載地址:https://www.mongodb.com/download-center#community
注意:在 MongoDB 2.2 版本后已經不再支持 Windows XP 系統。最新版本也已經沒有了 32 位系統的安裝文件。- MongoDB for Windows 64-bit 適合 64 位的 Windows Server 2008 R2, Windows 7 , 及最新版本的 Window 系統。
- MongoDB for Windows 32-bit 適合 32 位的 Window 系統及最新的 Windows Vista。 32 位系統上 MongoDB 的數據庫最大為 2GB。
- MongoDB for Windows 64-bit Legacy 適合 64 位的 Windows Vista, Windows Server 2003, 及 Windows Server 2008 。
根據你的系統下載 32 位或 64 位的 .msi 文件,下載后雙擊該文件,按操作提示安裝即可。
安裝過程中,你可以通過點擊 "Custom(自定義)" 按鈕來設置你的安裝目錄。
下一步安裝 "install mongoDB compass" 不勾選,否則可能要很長時間都一直在執行安裝,MongoDB Compass 是一個圖形界面管理工具,我們可以在后面自己到官網下載安裝,下載地址:https://www.mongodb.com/download-center/compass。
創建數據目錄
MongoDB將數據目錄存儲在 db 目錄下。但是這個數據目錄不會主動創建,我們在安裝完成后需要創建它。請注意,數據目錄應該放在根目錄下((如: C: 或者 D: 等 )。
在本教程中,我們已經在 C 盤安裝了 mongodb,現在讓我們創建一個 data 的目錄然后在 data 目錄里創建 db 目錄。
c:>cd c: ? c:>mkdir data ? c:>cd data ? c:data>mkdir db ? c:data>cd db ? c:datadb>你也可以通過 window 的資源管理器中創建這些目錄,而不一定通過命令行。
4.1.1 命令行下運行 MongoDB 服務器
為了從命令提示符下運行 MongoDB 服務器,你必須從 MongoDB 目錄的 bin 目錄中執行 mongod.exe 文件。
C:mongodbbinmongod --dbpath c:datadb如果執行成功,會輸出如下信息:
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
我們可以在命令窗口中運行 mongo.exe 命令即可連接上 MongoDB,執行如下命令:
C:mongodbbinmongo.exe4.1.3 配置 MongoDB 服務
管理員模式打開命令行窗口
創建目錄,執行下面的語句來創建數據庫和日志文件的目錄
mkdir c:datadb mkdir c:datalog創建配置文件
創建一個配置文件。該文件必須設置 systemLog.path 參數,包括一些附加的配置選項更好。
例如,創建一個配置文件位于 C:mongodbmongod.cfg,其中指定 systemLog.path 和 storage.dbPath。具體配置內容如下:
systemLog:destination: filepath: c:datalogmongod.log storage:dbPath: c:datadb4.1.4 安裝 MongoDB服務
通過執行mongod.exe,使用--install選項來安裝服務,使用--config選項來指定之前創建的配置文件。
C:mongodbbinmongod.exe --config "C:mongodbmongod.cfg" --install要使用備用 dbpath,可以在配置文件(例如:C:mongodbmongod.cfg)或命令行中通過 --dbpath 選項指定。
如果需要,您可以安裝 mongod.exe 或 mongos.exe 的多個實例的服務。只需要通過使用 --serviceName 和 --serviceDisplayName 指定不同的實例名。只有當存在足夠的系統資源和系統的設計需要這么做。
啟動MongoDB服務
net start MongoDB關閉MongoDB服務
net stop MongoDB移除 MongoDB 服務
C:mongodbbinmongod.exe --remove 命令行下運行 MongoDB 服務器 和 配置 MongoDB 服務 任選一個方式啟動就可以。任選一個操作就好
4.1.5 MongoDB 后臺管理 Shell
如果你需要進入MongoDB后臺管理,你需要先打開mongodb裝目錄的下的bin目錄,然后執行mongo.exe文件,MongoDB Shell是MongoDB自帶的交互式Javascript shell,用來對MongoDB進行操作和管理的交互式環境。
當你進入mongoDB后臺后,它默認會鏈接到 test 文檔(數據庫):
> mongo MongoDB shell version: 3.0.6 connecting to: test ……由于它是一個JavaScript shell,您可以運行一些簡單的算術運算:
> 2 + 2 4 >db 命令用于查看當前操作的文檔(數據庫):
> db test >插入一些簡單的記錄并查找它:
> db.runoob.insert({x:10}) WriteResult({ "nInserted" : 1 }) > db.runoob.find() { "_id" : ObjectId("5604ff74a274a611b0c990aa"), "x" : 10 } >第一個命令將數字 10 插入到 runoob 集合的 x 字段中。
4.2 Linux平臺安裝MongoDB
MongoDB 提供了 linux 各發行版本 64 位的安裝包,你可以在官網下載安裝包。
下載地址: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 的可執行文件位于 bin 目錄下,所以可以將其添加到 PATH 路徑中:
export PATH=<mongodb-install-directory>/bin:$PATH<mongodb-install-directory> 為你 MongoDB 的安裝路徑。如本文的 /usr/local/mongodb 。
4.2.1 創建數據庫目錄
MongoDB的數據存儲在data目錄的db目錄下,但是這個目錄在安裝過程不會自動創建,所以你需要手動創建data目錄,并在data目錄中創建db目錄。
以下實例中我們將data目錄創建于根目錄下(/)。
注意:/data/db 是 MongoDB 默認的啟動的數據庫路徑(--dbpath)。
mkdir -p /data/db4.2.2 命令行中運行 MongoDB 服務
你可以再命令行中執行mongo安裝目錄中的bin目錄執行mongod命令來啟動mongdb服務。
注意:如果你的數據庫目錄不是/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.74.2.3 MongoDB后臺管理 Shell
如果你需要進入MongoDB后臺管理,你需要先打開mongodb裝目錄的下的bin目錄,然后執行mongo命令文件。
MongoDB Shell是MongoDB自帶的交互式Javascript shell,用來對MongoDB進行操作和管理的交互式環境。
當你進入mongoDB后臺后,它默認會鏈接到 test 文檔(數據庫):
$ cd /usr/local/mongodb/bin $ ./mongo MongoDB shell version: 3.0.6 connecting to: test Welcome to the MongoDB shell. ……由于它是一個JavaScript shell,您可以運行一些簡單的算術運算:
> 2+2 4 > 3+6 9現在讓我們插入一些簡單的數據,并對插入的數據進行檢索:
> db.runoob.insert({x:10}) WriteResult({ "nInserted" : 1 }) > db.runoob.find() { "_id" : ObjectId("5604ff74a274a611b0c990aa"), "x" : 10 } >第一個命令將數字 10 插入到 runoob 集合的 x 字段中。
4.2.4 MongoDb web 用戶界面
MongoDB 提供了簡單的 HTTP 用戶界面。 如果你想啟用該功能,需要在啟動的時候指定參數 --rest 。
注意:該功能只適用于 MongoDB 3.2 及之前的早期版本。$ ./mongod --dbpath=/data/db --restMongoDB 的 Web 界面訪問端口比服務的端口多1000。
如果你的MongoDB運行端口使用默認的27017,你可以在端口號為28017訪問web用戶界面,即地址為:http://localhost:28017。
五、啟動Mongodb服務
在你的安裝目錄/bin下,有一個叫mongod.exe的應用程序,這個程序就是用來啟動你的mongodb服務器的。
創建數據庫目錄
在你想要存放數據的地方,新建一個文件夾,如db,我們推薦的數據庫目錄設置是:
data/ conf -->配置文件目錄 mongod.conf -->配置文件 db -->數據庫目錄 log -->日志文件目錄 mongodb.log -->日志記錄文件啟動數據庫
我本地是window10環境,我的mongodb服務安裝在F盤的mongodb文件夾。我的數據目錄在F的data文件夾。
啟動doc命令,輸入一下命令:
F:>mongodb/bin F:mongodbbin>mongod --path=/data/db輸出以下信息:
最后一行顯示"waiting for connections on port 27017",表明mongodb服務器已經啟動,正在27017窗口等待連接。
再查看f:/data/db文件夾,已出現以下文件:
說明mongodb服務啟動成功。
將MongoDB服務器作為Windows服務運行
像上面那樣啟動mongodb,發現沒辦法輸入命令行了,這是可以采用打開多個窗口來連接,但這樣就太麻煩了,解決辦法就是將MongoDB服務器作為Windows服務運行。
輸入以下命令:
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服務安裝成功。啟動mongodb服務:
F:mongodbbin>net start mongodb MongoDB 服務已經啟動成功。說明mongodb啟動成功。
由于我們并沒有指定mongodb服務的端口號,所以它啟動在默認的27017窗口。
打開瀏覽器,范圍地址http://127.0.0.1:27017/,可看到如下信息
It looks like you are trying to access MongoDB over HTTP on the native driver port.mongodb常用啟動參數
mongod.exe常用參數如下:
mongod.exe的啟動參數,在window環境下和linux環境下并不相同,詳見mongod - mongodb啟動服務工具。
六、MongoDB - 連接
6.1 啟動 MongoDB服務
在前面的教程中,我們已經討論了如何啟動MongoDB服務,你只需要在MongoDB安裝目錄的bin目錄下執行'mongod'即可。
執行啟動操作后,mongodb在輸出一些必要信息后不會輸出任何信息,之后就等待連接的建立,當連接被建立后,就會開始打印日志信息。
你可以使用 MongoDB shell 來連接 MongoDB 服務器。你也可以使用 PHP 來連接 MongoDB。本教程我們會使用 MongoDB shell 來連接 Mongodb 服務,之后的章節我們將會介紹如何通過php 來連接MongoDB服務。
6.2 通過shell連接MongoDB服務
你可以通過執行以下命令來連接MongoDB的服務。
注意:localhost為主機名,這個選項是必須的:
mongodb://localhost
當你執行以上命令時,你可以看到以下輸出結果:
$ ./mongo MongoDB shell version: 3.0.6 connecting to: test > mongodb://localhostmongodb://localhost ...這時候你返回查看運行 ./mongod 命令的窗口,可以看到是從哪里連接到MongoDB的服務器,您可以看到如下信息:
……省略信息…… 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) # 該行表明一個來自本機的連接 ……省略信息……6.3 MongoDB連接命令格式
使用用戶名和密碼連接到MongoDB服務器,你必須使用 'username:password@hostname/dbname' 格式,'username'為用戶名,'password' 為密碼。
使用用戶名和密碼連接登陸到默認數據庫:
$ ./mongo MongoDB shell version: 3.0.6 connecting to: test mongodb://admin:123456@localhost/以上命令中,用戶 admin 使用密碼 123456 連接到本地的 MongoDB 服務上。輸出結果如下所示:<、p>
> mongodb://admin:123456@localhost/ ...使用用戶名和密碼連接登陸到指定數據庫:
連接到指定數據庫的格式如下:
mongodb://admin:123456@localhost/test
6.4 更多連接實例
連接本地數據庫服務器,端口是默認的。
mongodb://localhost
使用用戶名fred,密碼foobar登錄localhost的admin數據庫。
mongodb://fred:foobar@localhost
使用用戶名fred,密碼foobar登錄localhost的baz數據庫。
mongodb://fred:foobar@localhost/baz
連接 replica pair, 服務器1為http://example1.com服務器2為example2。
mongodb://example1.com:27017,http://example2.com:27017
連接 replica set 三臺服務器 (端口 27017, 27018, 和27019):
mongodb://localhost,localhost:27018,localhost:27019
連接 replica set 三臺服務器, 寫入操作應用在主服務器 并且分布查詢到從服務器。
mongodb://host1,host2,host3/?slaveOk=true
直接連接第一個服務器,無論是replica set一部分或者主服務器或者從服務器。
mongodb://host1,host2,host3/?connect=direct;slaveOk=true
當你的連接服務器有優先級,還需要列出所有服務器,你可以使用上述連接方式。
安全模式連接到localhost:
mongodb://localhost/?safe=true
以安全模式連接到replica set,并且等待至少兩個復制服務器成功寫入,超時時間設置為2秒。
mongodb://host1,host2,host3/?safe=true;w=2;wtimeoutMS=2000
6.5 參數選項說明
標準格式:
mongodb://[username:password@]host1:port1,...,hostN[:portN]][?options]]
標準的連接格式包含了多個選項(options),如下所示:
七、Mongodb的使用
7.1 MongoDB 創建數據庫
MongoDB 創建數據庫的語法格式如下:
use DATABASE_NAME如果數據庫不存在,則創建數據庫,否則切換到指定數據庫。
以下實例我們創建了數據庫 mongo:
> use mongo switched to db mongo > db mongo >如果你想查看所有數據庫,可以使用 show dbs 命令:
> show dbs local 0.078GB test 0.078GB >可以看到,我們剛創建的數據庫 mongo 并不在數據庫的列表中, 要顯示它,我們需要向 mongo 數據庫插入一些數據。
> db.mongo.insert({"name":"mongodb中文網"}) WriteResult({ "nInserted" : 1 }) > show dbs local 0.078GB mongo 0.078GB test 0.078GB >MongoDB 中默認的數據庫為 test,如果你沒有創建新的數據庫,集合將存放在 test 數據庫中。
7.2 MongoDB 刪除數據庫
MongoDB 刪除數據庫的語法格式如下:
db.dropDatabase()刪除當前數據庫,默認為 test,你可以使用 db 命令查看當前數據庫名。
以下實例我們刪除了數據庫 mongo。
首先,查看所有數據庫:
> show dbs local 0.078GB mongo 0.078GB test 0.078GB接下來我們切換到數據庫 mongo
> use runoob switched to db mongo >執行刪除命令:
> db.dropDatabase() { "dropped" : "runoob", "ok" : 1 }最后,我們再通過 show dbs 命令數據庫是否刪除成功:
> show dbs local 0.078GB test 0.078GB >集合刪除語法格式如下:
db.collection.drop()7.3 MongoDB 插入文檔
插入文檔
MongoDB 使用 insert() 或 save() 方法向集合中插入文檔,語法如下:
db.COLLECTION_NAME.insert(document)實例
以下文檔可以存儲在 MongoDB 的 mongo 數據庫 的 col集合中:
>db.col.insert({title: 'MongoDB 教程', description: 'MongoDB 是一個 Nosql 數據庫', by: 'MongoDB中文網', url: 'http://www.mongodb.org.cn', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 })以上實例中 col 是我們的集合名,前一章節我們已經創建過了,如果該集合不在該數據庫中, MongoDB 會自動創建該集合并插入文檔。
查看已插入文檔:
> db.col.find() { "_id" : ObjectId("56064886ade2f21f36b03134"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個 Nosql 數據庫", "by" : "MongoDB中文網", "url" : "http://www.mongodb.org.cn", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 } >我們也可以將數據定義為一個變量,如下所示:
> document=({title: 'MongoDB 教程',description: 'MongoDB 是一個 Nosql 數據庫', by: 'Mongodb中文網', url: 'http://www.mongodb.org.cn', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 });執行后顯示結果如下:
{ "title" : "MongoDB 教程", "description" : "MongoDB 是一個 Nosql 數據庫", "by" : "Mongodb中文網", "url" : "http://www.mongodb.org.cn", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }執行插入操作:
> db.col.insert(document) WriteResult({ "nInserted" : 1 }) >插入文檔你也可以使用 db.col.save(document) 命令。如果不指定 _id 字段 save() 方法類似于 insert() 方法。如果指定 _id 字段,則會更新該 _id 的數據。
7.4 MongoDB 刪除文檔
語法
remove() 方法的基本語法格式如下所示:
db.collection.remove( <query>, <justOne> )如果你的 MongoDB 是 2.6 版本以后的,語法格式如下:
db.collection.remove( <query>, { justOne: <boolean>, writeConcern: <document> } )參數說明:
- query :(可選)刪除的文檔的條件。
- justOne : (可選)如果設為 true 或 1,則只刪除一個文檔。
- writeConcern :(可選)拋出異常的級別。
實例
以下文檔我們執行兩次插入操作:
>db.col.insert({title: 'MongoDB 教程', description: 'MongoDB 是一個 Nosql 數據庫', by: 'MongoDB中文網', url: 'http://www.mongodb.org.cn', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 })使用 find() 函數查詢數據:
> db.col.find() { "_id" : ObjectId("56066169ade2f21f36b03137"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個 Nosql 數據庫", "by" : "MongoDB中文網", "url" : "http://www.mongodb.org.cn", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 } { "_id" : ObjectId("5606616dade2f21f36b03138"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個 Nosql 數據庫", "by" : "MongoDB中文網", "url" : "http://www.mongodb.org.cn", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }接下來我們移除 title 為 'MongoDB 教程' 的文檔:
>db.col.remove({'title':'MongoDB 教程'}) WriteResult({ "nRemoved" : 2 }) # 刪除了兩條數據 >db.col.find() …… # 沒有數據如果你只想刪除第一條找到的記錄可以設置 justOne 為 1,如下所示:
>db.COLLECTION_NAME.remove(DELETION_CRITERIA,1)如果你想刪除所有數據,可以使用以下方式(類似常規 SQL 的 truncate 命令):
>db.col.remove({}) >db.col.find() >7.5 MongoDB 更新文檔
update() 方法
update() 方法用于更新已存在的文檔。語法格式如下:
db.collection.update( <query>, <update>, { upsert: <boolean>, multi: <boolean>, writeConcern: <document> } )參數說明:
- query : update的查詢條件,類似sql update查詢內where后面的。
- update : update的對象和一些更新的操作符(如$,$inc...)等,也可以理解為sql update查詢內set后面的
- upsert : 可選,這個參數的意思是,如果不存在update的記錄,是否插入objNew,true為插入,默認是false,不插入。
- multi : 可選,mongodb 默認是false,只更新找到的第一條記錄,如果這個參數為true,就把按條件查出來多條記錄全部更新。
- writeConcern :可選,拋出異常的級別。
實例
我們在集合 col 中插入如下數據:
>db.col.insert({ title: 'Mongodb 教程', description: 'MongoDB 是一個 Nosql 數據庫', by: 'Mongodb中文網', url: 'http://www.mongodb.org.cn', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 })接著我們通過 update() 方法來更新標題(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 是一個 Nosql 數據庫", "by" : "Mongodb中文網", "url" : "http://www.mongodb.org.cn", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 } >可以看到標題(title)由原來的 "MongoDB 教程" 更新為了 "MongoDB"。
以上語句只會修改第一條發現的文檔,如果你要修改多條相同的文檔,則需要設置 multi 參數為 true。
>db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})save() 方法
save() 方法通過傳入的文檔來替換已有文檔。語法格式如下:
db.collection.save( <document>, { writeConcern: <document> } )參數說明:
- document : 文檔數據。
- writeConcern :可選,拋出異常的級別。
實例
以下實例中我們替換了 _id 為 56064f89ade2f21f36b03136 的文檔數據:
>db.col.save({ "_id" : ObjectId("56064f89ade2f21f36b03136"), "title" : "MongoDB", "description" : "MongoDB 是一個 Nosql 數據庫", "by" : "MongoDB中文網", "url" : "http://www.mongodb.org.cn", "tags" : [ "mongodb", "NoSQL" ], "likes" : 110 } )替換成功后,我們可以通過 find() 命令來查看替換后的數據
>db.col.find().pretty() { "_id" : ObjectId("56064f89ade2f21f36b03136"), "title" : "MongoDB", "description" : "MongoDB 是一個 Nosql 數據庫", "by" : "Mongo", "url" : "http://www.mongodb.org.cn", "tags" : [ "mongodb", "NoSQL" ], "likes" : 110 } >更多實例
只更新第一條記錄:
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 );全部添加加進去:
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() 方法以非結構化的方式來顯示所有文檔。
語法
MongoDB 查詢數據的語法格式如下:
db.collection.find(query, projection)- query :可選,使用查詢操作符指定查詢條件
- projection :可選,使用投影操作符指定返回的鍵。查詢時返回文檔中所有鍵值, 只需省略該參數即可(默認省略)。
如果你需要以易讀的方式來讀取數據,可以使用 pretty() 方法,語法格式如下:
>db.col.find().pretty()pretty() 方法以格式化的方式來顯示所有文檔。
實例
以下實例我們查詢了集合 col 中的數據:
> db.col.find().pretty() {"_id" : ObjectId("56063f17ade2f21f36b03133"),"title" : "MongoDB 教程","description" : "MongoDB 是一個 Nosql 數據庫","by" : "菜鳥教程","url" : "http://www.runoob.com","tags" : ["mongodb","database","NoSQL"],"likes" : 100 }除了 find() 方法之外,還有一個 findOne() 方法,它只返回一個文檔。
7.6.1 MongoDB 與 RDBMS Where 語句比較
如果你熟悉常規的 SQL 數據,通過下表可以更好的理解 MongoDB 的條件語句查詢:
7.6.2 MongoDB AND 條件
MongoDB 的 find() 方法可以傳入多個鍵(key),每個鍵(key)以逗號隔開,即常規 SQL 的 AND 條件。
語法格式如下:
>db.col.find({key1:value1, key2:value2}).pretty()實例
以下實例通過 by 和 title 鍵來查詢 菜鳥教程 中 MongoDB 教程 的數據
> db.col.find({"by":"菜鳥教程", "title":"MongoDB 教程"}).pretty() {"_id" : ObjectId("56063f17ade2f21f36b03133"),"title" : "MongoDB 教程","description" : "MongoDB 是一個 Nosql 數據庫","by" : "菜鳥教程","url" : "http://www.runoob.com","tags" : ["mongodb","database","NoSQL"],"likes" : 100 }以上實例中類似于 WHERE 語句:WHERE by='菜鳥教程' AND title='MongoDB 教程'
7.6.3 MongoDB OR 條件
MongoDB OR 條件語句使用了關鍵字 $or,語法格式如下:
>db.col.find({$or: [{key1: value1}, {key2:value2}]} ).pretty()實例
以下實例中,我們演示了查詢鍵 by 值為 菜鳥教程 或鍵 title 值為 MongoDB 教程 的文檔。
>db.col.find({$or:[{"by":"菜鳥教程"},{"title": "MongoDB 教程"}]}).pretty() {"_id" : ObjectId("56063f17ade2f21f36b03133"),"title" : "MongoDB 教程","description" : "MongoDB 是一個 Nosql 數據庫","by" : "菜鳥教程","url" : "http://www.runoob.com","tags" : ["mongodb","database","NoSQL"],"likes" : 100 } >AND 和 OR 聯合使用
以下實例演示了 AND 和 OR 聯合使用,類似常規 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 是一個 Nosql 數據庫","by" : "菜鳥教程","url" : "http://www.runoob.com","tags" : ["mongodb","database","NoSQL"],"likes" : 100 }7.7 MongoDB 條件操作符
描述
條件操作符用于比較兩個表達式并從mongoDB集合中獲取數據。
在本章節中,我們將討論如何在MongoDB中使用條件操作符。
MongoDB中條件操作符有:
- (>) 大于 - $gt
- (<) 小于 - $lt
- (>=) 大于等于 - $gte
- (<= ) 小于等于 - $lte
我們使用的數據庫名稱為"runoob" 我們的集合名稱為"col",以下為我們插入的數據。
為了方便測試,我們可以先使用以下命令清空集合 "col" 的數據:
db.col.remove({})插入以下數據
>db.col.insert({title: 'PHP 教程', description: 'PHP 是一種創建動態交互性站點的強有力的服務器端腳本語言。',by: '菜鳥教程',url: 'http://www.runoob.com',tags: ['php'],likes: 200 }) >db.col.insert({title: 'Java 教程', description: 'Java 是由Sun Microsystems公司于1995年5月推出的高級程序設計語言。',by: '菜鳥教程',url: 'http://www.runoob.com',tags: ['java'],likes: 150 }) >db.col.insert({title: 'MongoDB 教程', description: 'MongoDB 是一個 Nosql 數據庫',by: '菜鳥教程',url: 'http://www.runoob.com',tags: ['mongodb'],likes: 100 })使用find()命令查看數據:
> db.col.find() { "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是一種創建動態交互性站點的強有力的服務器端腳本語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "php" ], "likes" : 200 } { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高級程序設計語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 } { "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個 Nosql 數據庫", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 }7.7.1 MongoDB (>) 大于操作符 - $gt
如果你想獲取 "col" 集合中 "likes" 大于 100 的數據,你可以使用以下命令:
db.col.find({likes : {$gt : 100}})類似于SQL語句:
Select * from col where likes > 100;輸出結果:
> db.col.find({likes : {$gt : 100}}) { "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是一種創建動態交互性站點的強有力的服務器端腳本語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "php" ], "likes" : 200 } { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高級程序設計語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 } >7.7.2 MongoDB(>=)大于等于操作符 - $gte
如果你想獲取"col"集合中 "likes" 大于等于 100 的數據,你可以使用以下命令:
db.col.find({likes : {$gte : 100}})類似于SQL語句:
Select * from col where likes >=100;輸出結果:
> db.col.find({likes : {$gte : 100}}) { "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是一種創建動態交互性站點的強有力的服務器端腳本語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "php" ], "likes" : 200 } { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高級程序設計語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 } { "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個 Nosql 數據庫", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 } >7.7.3 MongoDB (<) 小于操作符 - $lt
如果你想獲取"col"集合中 "likes" 小于 150 的數據,你可以使用以下命令:
db.col.find({likes : {$lt : 150}})類似于SQL語句:
Select * from col where likes < 150;輸出結果:
> db.col.find({likes : {$lt : 150}}) { "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個 Nosql 數據庫", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 }7.7.4 MongoDB (<=) 小于等于操作符 - $lte
如果你想獲取"col"集合中 "likes" 小于等于 150 的數據,你可以使用以下命令:
db.col.find({likes : {$lte : 150}})類似于SQL語句:
Select * from col where likes <= 150;輸出結果:
> db.col.find({likes : {$lte : 150}}) { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高級程序設計語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 } { "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個 Nosql 數據庫", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 }7.7.5 MongoDB 使用 (<) 和 (>) 查詢 - $lt 和 $gt
如果你想獲取"col"集合中 "likes" 大于100,小于 200 的數據,你可以使用以下命令:
db.col.find({likes : {$lt :200, $gt : 100}})類似于SQL語句:
Select * from col where likes>100 AND likes<200;輸出結果:
> db.col.find({likes : {$lt :200, $gt : 100}}) { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高級程序設計語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 } >7.8 MongoDB $type 操作符
描述
在本章節中,我們將繼續討論MongoDB中條件操作符 $type。
$type操作符是基于BSON類型來檢索集合中匹配的數據類型,并返回結果。
MongoDB 中可以使用的類型如下表所示:
我們使用的數據庫名稱為"runoob" 我們的集合名稱為"col",以下為我們插入的數據。
簡單的集合"col":
>db.col.insert({title: 'PHP 教程', description: 'PHP 是一種創建動態交互性站點的強有力的服務器端腳本語言。',by: '菜鳥教程',url: 'http://www.runoob.com',tags: ['php'],likes: 200 }) >db.col.insert({title: 'Java 教程', description: 'Java 是由Sun Microsystems公司于1995年5月推出的高級程序設計語言。',by: '菜鳥教程',url: 'http://www.runoob.com',tags: ['java'],likes: 150 }) >db.col.insert({title: 'MongoDB 教程', description: 'MongoDB 是一個 Nosql 數據庫',by: '菜鳥教程',url: 'http://www.runoob.com',tags: ['mongodb'],likes: 100 })使用find()命令查看數據:
> db.col.find() { "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是一種創建動態交互性站點的強有力的服務器端腳本語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "php" ], "likes" : 200 } { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高級程序設計語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 } { "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個 Nosql 數據庫", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 }MongoDB 操作符 - $type 實例
如果想獲取 "col" 集合中 title 為 String 的數據,你可以使用以下命令:
db.col.find({"title" : {$type : 2}}) 或 db.col.find({"title" : {$type : 'string'}})輸出結果為:
{ "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是一種創建動態交互性站點的強有力的服務器端腳本語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "php" ], "likes" : 200 } { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高級程序設計語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 } { "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個 Nosql 數據庫", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 }7.9 MongoDB Limit與Skip方法
7.9.1 MongoDB Limit() 方法
如果你需要在MongoDB中讀取指定數量的數據記錄,可以使用MongoDB的Limit方法,limit()方法接受一個數字參數,該參數指定從MongoDB中讀取的記錄條數。
語法
limit()方法基本語法如下所示:
>db.COLLECTION_NAME.find().limit(NUMBER)實例
集合 col 中的數據如下:
{ "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是一種創建動態交互性站點的強有力的服務器端腳本語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "php" ], "likes" : 200 } { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高級程序設計語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 } { "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個 Nosql 數據庫", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 }以下實例為顯示查詢文檔中的兩條記錄:
> db.col.find({},{"title":1,_id:0}).limit(2) { "title" : "PHP 教程" } { "title" : "Java 教程" } >注:如果你們沒有指定limit()方法中的參數則顯示集合中的所有數據。
7.9.2 MongoDB Skip() 方法
我們除了可以使用limit()方法來讀取指定數量的數據外,還可以使用skip()方法來跳過指定數量的數據,skip方法同樣接受一個數字參數作為跳過的記錄條數。
語法
skip() 方法腳本語法格式如下:
>db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)實例
以下實例只會顯示第二條文檔數據
>db.col.find({},{"title":1,_id:0}).limit(1).skip(1) { "title" : "Java 教程" } >注:skip()方法默認參數為 0 。
8.0 MongoDB 排序
MongoDB sort() 方法
在 MongoDB 中使用 sort() 方法對數據進行排序,sort() 方法可以通過參數指定排序的字段,并使用 1 和 -1 來指定排序的方式,其中 1 為升序排列,而 -1 是用于降序排列。
語法
sort()方法基本語法如下所示:
>db.COLLECTION_NAME.find().sort({KEY:1})實例
col 集合中的數據如下:
{ "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是一種創建動態交互性站點的強有力的服務器端腳本語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "php" ], "likes" : 200 } { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高級程序設計語言。", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 } { "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個 Nosql 數據庫", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 }以下實例演示了 col 集合中的數據按字段 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 導入依賴
<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><!--實體--><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/test9.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; ?/*** 創建對象*/public void saveTest(MongoTest test) {mongoTemplate.save(test);} ?/*** 根據用戶名查詢對象* @return*/public MongoTest findTestByName(String name) {Query query=new Query(Criteria.where("name").is(name));MongoTest mgt = mongoTemplate.findOne(query , MongoTest.class);return mgt;} ?/*** 更新對象*/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());//更新查詢返回結果集的第一條mongoTemplate.updateFirst(query,update,MongoTest.class);//更新查詢返回結果集的所有// mongoTemplate.updateMulti(query,update,TestEntity.class);} ?/*** 刪除對象* @param id*/public void deleteTestById(Integer id) {Query query=new Query(Criteria.where("id").is(id));mongoTemplate.remove(query,MongoTest.class);} }總結
以上是生活随笔為你收集整理的mongodb连接失败_MongoDB 基础入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python猜数游戏流程_Python
- 下一篇: Python 统计一行字符中单词的个数_