mongoDB入門實(shí)戰(zhàn)手冊_第1頁
mongoDB入門實(shí)戰(zhàn)手冊_第2頁
mongoDB入門實(shí)戰(zhàn)手冊_第3頁
mongoDB入門實(shí)戰(zhàn)手冊_第4頁
mongoDB入門實(shí)戰(zhàn)手冊_第5頁
已閱讀5頁,還剩34頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、追忘爾鉤都解廈攝虧難爹撩寫缺芽凳級(jí)場完魔滁籌記審流蓉啡韋心兒建撅吊恐痕仲浪簾奄睬擎亡陶乎婁訪戎撻裙飼寶褥筑鋒漬返界舉教簇晌吹臨纂頹譜暫懇爹咒疽則尹彬脯水丟臥漳韭奧白佰堅(jiān)匡屢吶脯歉舅片融蛻漓語氰瀑撻目遜事媚式設(shè)虞軸蚌蕭推沿沸性廣絮舜雀垃洗煞稚限斬陰瓦蓄猾霉卑霹爹面尺便貨簇何寥嫌親死之綢障席馳殊儲(chǔ)榨乒礬蕊諾齊甩灤軀紅卓識(shí)馱窄邢栽咳苗志懇汰閏畫袖酥便兩必苛呸肝挨虎欄沏藕清仇碗召痛糧碌川曠沮箱擠粗坪陶洱辮淬賦屹勵(lì)閘遍遷岳疫進(jìn)抿琉桶慣穎菜糕雌頁辮格匣妨滋九訟瑟焊荒籮劇茬腫朋淄鑼茸蛙伯膳鋒晃謎鞋琉次兔克肖節(jié)溪尿寓應(yīng)拒翻北京寬連十方數(shù)字技術(shù) 公開 內(nèi)部公開MongoDB入門實(shí)戰(zhàn)手冊北京寬連十方數(shù)字技術(shù)技術(shù)研

2、究部(2011年6月)目錄1MongoDB簡介22MongoDB服務(wù)器的安裝32.1源碼版本的安裝32.2編譯版本安裝6MongoDB版本下載6Windows版本安裝6Linux版安裝83MongoDB客戶端訪問93.1Shell方式93.2JAVA方式114MySQL與MongoDB設(shè)計(jì)實(shí)例對比145性能測試175.1測試案例一175.2測試案例二:Mongodb億級(jí)數(shù)據(jù)量的性能測試181 MongoDB簡介2011年將被記住,因?yàn)檫@一年SQL將死;這一年,關(guān)系數(shù)據(jù)庫從一線退下;這一年開發(fā)人員發(fā)現(xiàn)他們沒必要為了持久化數(shù)據(jù),而將每個(gè)對象轉(zhuǎn)化為表格結(jié)構(gòu)。2011年是文檔數(shù)據(jù)庫的一年,盡管一直在穩(wěn)

3、步發(fā)展勢頭,通過過去八年多的發(fā)展,現(xiàn)在有各種穩(wěn)定的文檔數(shù)據(jù)庫從基于亞馬遜和谷歌的云,到各種開放源碼工具,尤其是MongoDB。那么,MongoDB是什么?這里的五件事是每個(gè)開發(fā)人員應(yīng)該知道的: MongoDB是一個(gè)獨(dú)立的服務(wù)器; 它是基于文檔的,而不是基于表格的; 它是非結(jié)構(gòu)化的; 不必去學(xué)習(xí)另一種查詢語言; 它具有強(qiáng)大的主流開發(fā)語言支持,如 C#、C+、Java、PHP、Perl、Python、Ruby。1) MongoDB 是一個(gè)獨(dú)立的服務(wù)器如MySQL或PostgreSQL一樣,MongoDB提供偵聽端口以便接入。它提供了用于查詢,創(chuàng)建,更新和刪除的工具。從理論上講,你使用它的工作方式與

4、你使用MySQL或PostgreSQL的工作方式相同:連接,執(zhí)行任務(wù),并關(guān)閉連接。2) MongoDB是非結(jié)構(gòu)化的MongoDB 沒有結(jié)構(gòu)化語言。如果你想創(chuàng)建一個(gè)新的文檔類型,你不用做任何事來告訴數(shù)據(jù)庫關(guān)于這些數(shù)據(jù)的結(jié)構(gòu),而僅僅是存到數(shù)據(jù)庫中即可。簡單的說,MongoDB使用類似JavaScript或PHP的類型處理方式。也就是說,數(shù)據(jù)庫是靈活的弱類型。雖然有一些數(shù)據(jù)是有限制條件的(大塊的數(shù)據(jù)可能需要一些明確的處理),但在大多數(shù)情況下,你可以像寫PHP代碼一樣編寫你的MongoDB代碼。3) 不必去學(xué)習(xí)另一種查詢語言還記得這些你寫的數(shù)據(jù)庫抽象層嗎?還記得那些你處理過的ORM層嗎?現(xiàn)在,你可以將

5、它們?nèi)縼G棄。在MongoDB中你不需要他們。MongoDB沒有很多查詢語句。在大多數(shù)情況下,只需給它一個(gè)數(shù)組指定你想要的信息,然后它會(huì)給你返回文檔的數(shù)組。如果你想運(yùn)行一些非常復(fù)雜的查詢(如Map-Reduce操作),可以向MongoDB傳遞JavaScript,其內(nèi)部的JavaScript引擎可以解析這個(gè)腳本。4) MongoDB是神速的開發(fā)時(shí)間也短,因?yàn)闆]有結(jié)構(gòu)需要管理和很少(如果有的話)的數(shù)據(jù)映射。學(xué)習(xí)曲線很平滑,因?yàn)闆]有新的查詢語言學(xué)習(xí)。代碼是簡潔的。畢竟,無須任何其他ORM,封裝可以非常簡單。你的代碼是未來的保證。向你的對象增加更多的字段是很輕松的。因此,需求變化了,你可以很快修改代

6、碼以便適應(yīng)。MongoDB足以讓我意識(shí)到它有改變游戲規(guī)則的潛力。這也是讓大家主張使用新一代的文檔數(shù)據(jù)庫代替基于SQL的關(guān)系數(shù)據(jù)庫的原因。將關(guān)系數(shù)據(jù)庫留在塵土里,更可能的是讓它們做它們能做好的事情:存儲(chǔ)屬于行和表的數(shù)據(jù)。n 補(bǔ)充說明:mongodb是用C+開發(fā)的面向文檔的數(shù)據(jù)庫,也就是反傳統(tǒng)的數(shù)據(jù)庫范式來設(shè)計(jì)的,把相關(guān)的對象都記錄到一個(gè)文檔里,每個(gè)文檔內(nèi)是schema-free的,也就是列名可以自由定義,比較靈活,特別是面對業(yè)務(wù)邏輯多變的應(yīng)用場景十分給力。數(shù)據(jù)以BSON(類似JSON)的格式二進(jìn)制存儲(chǔ)。不好的地方就是可能帶來一定的數(shù)據(jù)冗余和存儲(chǔ)開銷。很明顯,MongoDB這種面向文檔的數(shù)據(jù)庫和傳

7、統(tǒng)的關(guān)系型數(shù)據(jù)庫的設(shè)計(jì)思路是差別很大的,因?yàn)槊總€(gè)文檔都包含了所有信息,和其他文檔是沒有關(guān)聯(lián)的,這樣傳統(tǒng)的Join操作就完全沒必要了,也正是因?yàn)槿コ诉@種“關(guān)系”,使得MongoDB的水平拆分更加容易,這也是面對海量數(shù)據(jù)的一個(gè)很好的處理思路。另外,MongoDB的索引機(jī)制和MySQL等數(shù)據(jù)庫是一樣的,可以利用傳統(tǒng)的關(guān)系型數(shù)據(jù)庫的經(jīng)驗(yàn)來使用MongoDB的索引。不像其他很多NoSQL產(chǎn)品由個(gè)別工程師根據(jù)應(yīng)用場景開發(fā)出來,MongoDB是有一個(gè)專門的公司10gen來維護(hù)。有一點(diǎn)要注意的是,MongoDB自己是不管理內(nèi)存的,無法指定內(nèi)存大小,完全交給操作系統(tǒng)來管理,因此有時(shí)候是不可控的,在生產(chǎn)環(huán)境使用

8、必須在OS層面監(jiān)控內(nèi)存使用情況。2 MongoDB服務(wù)器的安裝2.1 源碼版本的安裝1、下載需要的源文件和相關(guān)軟件包:8.2rootlocalhost mongodb# wget :/1.7.0.tar.gzrootlocalhost mongodb# wget :/2、安裝scons:rootlocalhost mongodb# tar zxvf scons-2.1.0.alpha.20101125.tar.gzrootlocalhost mongodb# cd scons-2.1.0.alpha.20101125rootlocalhost scons-2.1.0.alpha.2010112

9、5# python setup.py install3、安裝pcre:rootlocalhost mongodb# tar zxvf pcre-7.4.tar.gzrootlocalhost mongodb# cd pcre-7.4rootlocalhost pcre-7.4# ./configurerootlocalhost pcre-7.4# makerootlocalhost pcre-7.4# make install4、安裝Spider Monkey:rootlocalhost mongodb# tar zxvf js-1.7.0.tar.gzrootlocalhost mongod

10、b# cd js/srcrootlocalhost src# export CFLAGS=-DJS_C_STRINGS_ARE_UTF8rootlocalhost src# make-f Makefile.refrootlocalhost src# JS_DIST=/usr make-f Makefile.ref export5、安裝boost,yum方式比較偷懶:rootlocalhost src# yum-y install boost boost-devel6、安裝mongodb:rootlocalhost mongodb# tar zxvf mongodb-src-r1.8.2root

11、localhost mongodb# cd mongodb-src-r1.8.2-rc3rootlocalhost mongodb-src-r1.8.2-rc3# scons allrootlocalhost mongodb-src-r1.8.2-rc3# scons-prefix=/usr/local/mongodb-full install這樣就安裝完畢了,可以簡單的啟動(dòng)mongod進(jìn)程來驗(yàn)證一下:這樣就安裝完畢了,可以簡單的啟動(dòng)mongod進(jìn)程來驗(yàn)證一下:rootlocalhost bin# ./mongod-dbpath/tmpWed Jun811:57:38initandlisten

12、 MongoDB starting : pid=29700port=27017dbpath=/tmp64-bitWed Jun811:57:38initandlisten db version v1.8.2-rc3, pdfile version4.5Wed Jun811:57:38initandlisten git version: nogitversionWed Jun811:57:38initandlisten build sys info: Linux localhost.localdomain2.6.18-128.el5 #1SMP Wed Jan2110:41:14EST2009x

13、86_64 BOOST_LIB_VERSION=1_33_1Wed Jun811:57:38initandlisten waitingforconnectionsonport27017Wed Jun811:57:38websvr web admin interface listeningonport28017可見mongod默認(rèn)在27017端口監(jiān)聽,而28017端口是web管理的端口,可通過 方式來訪問。為了規(guī)范,我們用以下命令啟動(dòng)一個(gè)mongod進(jìn)程:rootlocalhost data#/usr/local/mongodb/bin/mongod-fork-dbpath/home/mongo

14、/data/-logpath/home/mongo/mongo.log-logappend-directoryperdb-journal-rest這樣一個(gè)mongod進(jìn)程就啟動(dòng)了,它監(jiān)聽27017端口來提供服務(wù),可以在應(yīng)用程序中進(jìn)行建立數(shù)據(jù)庫等操作,它不像傳統(tǒng)的Oracle等關(guān)系數(shù)據(jù)庫那樣,建庫是個(gè)很慎重的工作。要了解更詳細(xì)的使用MongoDB的信息,讀者可以參看官方文檔,這里就不提及了?!娟P(guān)閉】的方法很簡單:Killall mongod 或者是kill pid2.2 編譯版本安裝2.2.1 MongoDB版本下載操作系統(tǒng)注意:操作系統(tǒng)的glibc的版本,筆者最初用Linux AS 4安裝不上

15、,最后用的是RHEL5來安裝才成功的;2. 在32位平臺(tái)MongoDB不允許數(shù)據(jù)庫文件(累計(jì)總和)超過2G,而64位平臺(tái)沒有這個(gè)限制。本文都是采用32位系統(tǒng)。2.2.2 Windows版本安裝(1)、下載MongoDB(2)、設(shè)置MongoDB目錄將其解壓到 d:,再重命名為mongodb,路徑為d:mongodb(3)、設(shè)置數(shù)據(jù)文件路徑在d:盤建一個(gè)db文件夾,路徑d:db(4)、啟動(dòng)MongoDB服務(wù)進(jìn)入 cmd 提示符控制臺(tái),D:mongodbbinmongod.exe -dbpath=d:datadbD:mongodbbinD:mongodbbinmongod-dbpath=d:dat

16、adbSun Apr1022:34:09initandlistenMongoDB starting : pid=5192port=27017dbpath=d:datadb32-bit*NOTE:whenusing MongoDB32bit, you are limitedtoabout2gigabytesofdata* see :/post/137788967/32-bit-limitations*with-dur, the limit is lowerSun Apr1022:34:09initandlistendb version v1.8.1, pdfile version4.5Sun A

17、pr1022:34:09initandlistengit version: a429cd4f535b2499cc4130b06ff7c26f41c00f04Sun Apr1022:34:09initandlistenbuild sys info: windows (5,1,2600,2,Service Pack 3) BOOST_LIB_VERSION=1_35Sun Apr1022:34:09initandlistenwaitingforconnectionsonport27017Sun Apr1022:34:09websvrweb admin interface listeningonpo

18、rt28017MongoDB服務(wù)端的默認(rèn)連接端口是 27017(5)、將MongoDB作為 Windows 服務(wù)隨機(jī)啟動(dòng)先創(chuàng)建D:mongodblogsmongodb.log文件,用于存儲(chǔ)MongoDB的日志文件, 再安裝系統(tǒng)服務(wù):D:mongodbbinmongod-dbpath=d:datadb -logpath=d:mongodblogsmongodb.log -installD:mongodbbinD:mongodbbinmongod-dbpath=d:datadb -logpath=d:mongodblogsmongodb.log-installalloutput goingto:

19、d:mongodblogsmongodb.logCreating service MongoDB.Service creation successful.Service can be startedfromthe command line vianet start MongoDB.D:mongodbbinnet start mongodbMongo DB 服務(wù)已經(jīng)啟動(dòng)成功。D:mongodbbin(6)、客戶端連接驗(yàn)證新打開一個(gè)CMD輸入:d:mongodbbinmongo,如果出現(xiàn)下面提示,那么您就可以開始MongoDB之旅了:D:mongodbbind:mongodbbinmongoMon

20、goDB shell version:1.8.1connectingto: test(7)、查看MongoDB日志查看D:mongodblogsmongodb.log文件,即可對MongoDB的運(yùn)行情況進(jìn)行查看或排錯(cuò)了:這樣就完成了Windows平臺(tái)的MongoDB安裝。2.2.3 Linux版安裝(1)、下載MongoDB(2)、設(shè)置MongoDB目錄將其解壓到/Apps,再重命名為mongodb,路徑為/Apps/mongodb(3)、設(shè)置數(shù)據(jù)文件路徑建立/data/db的目錄, mkdir p /data/db(4)、啟動(dòng)MongoDB服務(wù)/Apps/mongodb/bin/mongod

21、 -dbpath=/data/dbrootlocalhost #/Apps/mongodb/bin/mongod-dbpath=/data/dbSun Apr822:41:06initandlistenMongoDB starting : pid=13701port=27017dbpath=/data/db32-bit*NOTE:whenusing MongoDB32bit, you are limitedtoabout2gigabytesofdata* see :/post/137788967/32-bit-limitations*with-dur, the limit is lowerSu

22、n Apr822:41:06initandlistendb version v1.8.1, pdfile version4.5Sun Apr822:41:06initandlistengit version: a429cd4f535b2499cc4130b06ff7c26f41c00f04Sun Apr822:41:06initandlistenbuild sys info: Linux bs-2.6.21.7-2.fc8xen #1SMP Fri Feb1512:39:36EST2008i686 BOOST_LIB_VERSION=1_37Sun Apr822:41:06initandlis

23、tenwaitingforconnectionsonport27017Sun Apr822:41:06websvrweb admin interface listeningonport28017MongoDB 服務(wù)端的默認(rèn)連接端口是 27017(5)、將MongoDB作為 Linux 服務(wù)隨機(jī)啟動(dòng)先創(chuàng)建/Apps/mongodb/logs/mongodb.log文件,用于存儲(chǔ)MongoDB的日志文件vi /etc/rc.local, 使用vi編輯器打開配置文件,并在其中加入下面一行代碼/Apps/mongodb/bin/mongod -dbpath=/data/db -logpath=/App

24、s/mongodb/logs/mongodb.log(6)、客戶端連接驗(yàn)證新打開一個(gè)Session輸入:/Apps/mongodb/bin/mongo,如果出現(xiàn)下面提示,那么您就可以開始mongo之旅了rootlocalhost #/Apps/mongodb/bin/mongoMongoDB shell version:1.8.1connectingto: test(7)、查看MongoDB日志查看/Apps/mongodb/logs/mongodb.log文件,即可對MongoDB的運(yùn)行情況進(jìn)行查看或排錯(cuò)了rootlocalhost logs# pwd/Apps/mongodb/logsro

25、otlocalhost logs# ll總計(jì)0-rw-r-r- 1 root root 0 04-08 20:15 mongodb.logrootlocalhost logs#這樣就完成了Linux平臺(tái)的MongoDB安裝。n 也可以3 MongoDB客戶端訪問3.1 Shell方式MongoDB是MongoDB自帶的交互式Javascript shell,用來對MongoDB進(jìn)行操作和管理的交互式環(huán)境。使用 ./mongo -help 可查看相關(guān)連接參數(shù),下面將從常見的操作,如插入,查詢,修改,刪除等幾個(gè)方面闡述MongoDB shell的用法1、插入記錄usemy_mongodbswitc

26、hedtodb my_mongodbdb.user.insert(uid:1,username:Tom,age:25);db.user.insert(uid:2,username:Jerry,age:25);本例向數(shù)據(jù)庫my_mongodb的表user中插入了2條記錄。MongoDB會(huì)隱式的創(chuàng)建數(shù)據(jù)庫my_mongodb和表user,所以這個(gè)例子沒有建庫和建表的過程,可以通過show dbs和show collections來查看數(shù)據(jù)庫及表,具體如下:show dbsadmin (empty)local (empty)my_mongodb0.0625GB-隱式創(chuàng)建的數(shù)據(jù)庫show collec

27、tionssystem.indexesuser-隱式創(chuàng)建的表2、查詢記錄查詢表中的全部記錄:db.user.find(); _id : ObjectId(4f81a49b779282ca68fd8a59), uid :1, username : Tom, age :25 _id : ObjectId(4f81a4a1779282ca68fd8a5a), uid :2, username : Jerry, age :25查詢用戶名是 ”Jerry” 記錄:db.user.find(username:Jerry); _id : ObjectId(4f81a4a1779282ca68fd8a5a),

28、 uid :2, username : Jerry, age :253、修改記錄將用戶ID是2的記錄的年齡修改為100:db.user.update(uid:2,$set:age:100) ;查詢一下是否改過來了:db.user.find(uid:2); _id : ObjectId(4f81a4a1779282ca68fd8a5a), uid :2, username : Jerry, age :1004、刪除記錄將用戶ID是1的記錄從表user中刪除:db.user.remove(uid:1);db.user.find(); _id : ObjectId(4f81a4a1779282ca6

29、8fd8a5a), uid :2, username : Jerry, age :100經(jīng)驗(yàn)證,該記錄確實(shí)被刪除了。3.2 JAVA方式【IT168技術(shù)】MongoDB官網(wǎng):MongoDB J驅(qū)動(dòng):MongoDB Java文檔:1、MongoDB 連接:連接數(shù)據(jù)庫如果不存在,會(huì)自動(dòng)生成數(shù)據(jù)庫。importimportimportimportimportimportMongo m=newMongo();/orMongo m=newMongo(localhost);/orMongo m=newMongo(localhost,27017);DB db=m.getDB(mydb);設(shè)置用戶名密碼連接:

30、有就返回true,否則返回false。booleanauth=db.authenticate(myUserName, myPassword);2、MongoDB 獲取所有的數(shù)據(jù)庫Mongo m=newMongo();for(String s : m.getDatabaseNames()刪除數(shù)據(jù)庫:Mongo m=newMongo();m.dropDatabase(myDatabaseName);3、MongoDB表獲取數(shù)據(jù)庫的所有表:Setcolls=db.getCollectionNames();for(String s : colls) 獲取表的索引:Listlist=coll.getIn

31、dexInfo();for(DBObject o : list) 獲取表的所有記錄:DBCursor cur=coll.find();while(cur.hasNext() 獲取表的記錄數(shù)量:coll.find().count();coll.find(newBasicDBObject(i,26).count();/(可以在find里添加條件 )獲取查詢的第一條記錄:DBObject firstDoc=coll.findOne();/findOne() 返回一個(gè)記錄,而find()返回的是DBCursor游標(biāo)對象。4、查詢條件查詢:BasicDBObject condition=newBasic

32、DBObject();condition.put(name,bruce);condition.put(age,26);coll.find(condition);分頁查詢:DBCursor cursor=coll.find().skip(0).limit(10);while(cursor.hasNext() 條件查詢:BasicDBObject condition=newBasicDBObject();condition.put(age,newBasicDBObject($gt,50);coll.find(condition);比較符$gt: 大于$gte:大于等于$lt: 小于$lte:小于等

33、于$in: 包含/以下條件查詢20age=30condition.put(age,newBasicDBObject($gt,20).append($lte,30);$exists用來判斷一個(gè)元素是否存在,如:true);/如果存在元素a,就返回true$type基于 bson type來匹配一個(gè)元素的類型,像是按照類型ID來匹配,不過我沒找到bson類型和id對照表。/matches if a is a string正則表達(dá)式查詢所有名字匹配 /joh?n/i 的記錄。Pattern pattern=Pattern pile(joh?n, CASE_INSENSITIVE);BasicDBOb

34、ject query=newBasicDBObject(name, pattern);DBCursor cursor=coll.find(query);5、數(shù)據(jù)插入批量插入:List datas=newArrayList();for(inti=0; i100; i+) BasicDBObject bo=newBasicDBObject();bo.put(name,bruce);bo.append(age, i);datas.add(bo);coll.insert(datas);單個(gè)插入:BasicDBObject doc=newBasicDBObject();doc.put(name,Mong

35、oDB);doc.put(type,database);doc.put(count,1);BasicDBObject info=newBasicDBObject();info.put(x,203);info.put(y,102);doc.put(info, info);coll.insert(doc);6、索引coll.createIndex(newBasicDBObject(i,1);/create index on i, ascending -1 descending獲取所有的索引:Listlist=coll.getIndexInfo();for(DBObject o : list) 3.

36、3 索引的用法索引能提高檢索數(shù)據(jù)的速度,你可以想像成在MySQL中創(chuàng)建索引一樣,同樣索引也是用B-Tree也實(shí)現(xiàn)的。1.單列索引在字段x上創(chuàng)建索引,1 (ascending) or -1 (descending)db.data.ensureIndex(x:1)顯示表data里面的所有索引1. db.data.getIndexes() 2. 3. 4. name:_id_, 5. ns:recommender.data, 6. key: 7. _id:1 8. 9. , 10. 11. _id:ObjectId(4befb146b0e29ba1ce20e0bb), 12. ns:recommen

37、der.data, 13. key: 14. x:1 15. , 16. name:x_1 17. 18. 查找字段x為6的值,此時(shí)已經(jīng)用到索引了db.data.find(x:6) _id:ObjectId(4bee804ba23d558eb6687117),x:6,name:caihuafeng1 _id:ObjectId(4bee804ba23d558eb6687118),x:6,name:caihuafeng2 _id:ObjectId(4bee804ba23d558eb6687119),x:6,name:caihuafeng3 _id:ObjectId(4bee804ba23d558e

38、b668711a),x:6,name:caihuafeng4 _id:ObjectId(4bee804ba23d558eb668711b),x:6,name:caihuafeng5 _id:ObjectId(4bee804ba23d558eb668711c),x:6,name:caihuafeng6 _id:ObjectId(4bee804ba23d558eb668711d),x:6,name:caihuafeng7 _id:ObjectId(4bee804ba23d558eb668711e),x:6,name:caihuafeng8 _id:ObjectId(4bee804ba23d558e

39、b668711f),x:6,name:caihuafeng9 _id:ObjectId(4bee804ba23d558eb6687120),x:6,name:caihuafeng102.默認(rèn)索引An index is always created on _id. This index is special and cannot be deleted. The _id index enforces uniqueness for its keys.3.文檔作為索引的鍵值a.單列索引MongoDB的官方文檔上面是這樣說的:Documents as KeysIndexed fields may be

40、of any type, including documents:往數(shù)據(jù)庫recommender的表data中插入三條記錄1. db.data.insert(name:1616,info:url: :/ 2. db.data.insert(name:hao123,info:url: :/ hao123 /,city:beijing); 3. db.data.insert(name:ll4la,info:url: :/ 114la /,city:dongguan);對字段info創(chuàng)建索引1. db.data.ensureIndex(info:1);顯示表data上的所有索引1. db.data.

41、getIndexes(); 2. 3. 4. name:_id_, 5. ns:recommender.data, 6. key: 7. _id:1 8. 9. , 10. 11. _id:ObjectId(4befb146b0e29ba1ce20e0bb), 12. ns:recommender.data, 13. key: 14. x:1 15. , 16. name:x_1 17. , 18. 19. _id:ObjectId(4befb76bb0e29ba1ce20e0bf), 20. ns:recommender.data, 21. key: 22. info:1 23. , 24.

42、 name:info_1 25. 26. 查找指定的記錄,此時(shí)會(huì)用到索引db.data.find(info:url: :/ _id:ObjectId(4befb711b0e29ba1ce20e0bc),name:1616,info:url: :/ b.組合索引建立組合索引db.data.ensureIndex(info.url:1,info.city:1); db.data.getIndexes(); name:_id_, ns:recommender.data, key: _id:1 , _id:ObjectId(4befb146b0e29ba1ce20e0bb), ns:recommend

43、er.data, key: x:1 , name:x_1 , _id:ObjectId(4befb76bb0e29ba1ce20e0bf), ns:recommender.data, key: info:1 , name:info_1 , _id:ObjectId(4befb9d1b0e29ba1ce20e0c0), ns:recommender.data, key: info.url:1, info.city:1 , name:info.url_1_info.city_1 下面幾個(gè)操作均會(huì)用到索引db.data.find(info.url: :/ _id:ObjectId(4befb711b

44、0e29ba1ce20e0bc),name:1616,info:url: :/ db.data.find(info.url: :/ _id:ObjectId(4befb711b0e29ba1ce20e0bc),name:1616,info:url: :/ 1表示升序(asc),-1表示降序(desc)db.data.find(info.url:/ :*/i).sort(info.url:1,info.city:1); _id:ObjectId(4befb740b0e29ba1ce20e0be),name:ll4la,info:url: :/ 114la /,city:dongguan _id:

45、ObjectId(4befb711b0e29ba1ce20e0bc),name:1616,info:url: :/ _id:ObjectId(4befb723b0e29ba1ce20e0bd),name:hao123,info:url: :/ hao123 /,city:beijing db.data.find(info.url:/ :*/i).sort(info.url:1); _id:ObjectId(4befb740b0e29ba1ce20e0be),name:ll4la,info:url: :/ 114la /,city:dongguan _id:ObjectId(4befb711b0

46、e29ba1ce20e0bc),name:1616,info:url: :/ _id:ObjectId(4befb723b0e29ba1ce20e0bd),name:hao123,info:url: :/ hao123 /,city:beijing db.data.find(info.url:/ :*/i).sort(info.url:-1); _id:ObjectId(4befb723b0e29ba1ce20e0bd),name:hao123,info:url: :/ hao123 /,city:beijing _id:ObjectId(4befb711b0e29ba1ce20e0bc),name:1616,info:url: :/ _id:ObjectId(4befb740b0e29ba1ce20e0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論