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

下載本文檔

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

文檔簡介

1、北京寬連十方數(shù)字技術(shù)有限公司公開 內(nèi)部公開機密 絕密MongoDB入門實戰(zhàn)手冊北京寬連十方數(shù)字技術(shù)有限公司技術(shù)研究部(2011年6月)目錄1MongoDB簡介22MongoDB服務器的安裝32.1源碼版本的安裝32.2編譯版本安裝62.2.1MongoDB版本下載62.2.2Windows版本安裝62.2.3Linux版安裝83MongoDB客戶端訪問93.1Shell方式93.2JAVA方式114MySQL與MongoDB設計實例對比145性能測試175.1測試案例一175.2測試案例二:Mongodb億級數(shù)據(jù)量的性能測試181 MongoDB簡介2011年將被記住,因為這一年SQL將死;這

2、一年,關(guān)系數(shù)據(jù)庫從一線退下;這一年開發(fā)人員發(fā)現(xiàn)他們沒必要為了持久化數(shù)據(jù),而將每個對象轉(zhuǎn)化為表格結(jié)構(gòu)。2011年是文檔數(shù)據(jù)庫的一年,盡管一直在穩(wěn)步發(fā)展勢頭,通過過去八年多的發(fā)展,現(xiàn)在有各種穩(wěn)定的文檔數(shù)據(jù)庫從基于亞馬遜和谷歌的云,到各種開放源碼工具,尤其是MongoDB。那么,MongoDB是什么?這里的五件事是每個開發(fā)人員應該知道的: MongoDB是一個獨立的服務器; 它是基于文檔的,而不是基于表格的; 它是非結(jié)構(gòu)化的; 不必去學習另一種查詢語言; 它具有強大的主流開發(fā)語言支持,如 C#、C+、Java、PHP、Perl、Python、Ruby。1) MongoDB 是一個獨立的服務器如MyS

3、QL或PostgreSQL一樣,MongoDB提供偵聽端口以便接入。它提供了用于查詢,創(chuàng)建,更新和刪除的工具。從理論上講,你使用它的工作方式與你使用MySQL或PostgreSQL的工作方式相同:連接,執(zhí)行任務,并關(guān)閉連接。2) MongoDB是非結(jié)構(gòu)化的MongoDB 沒有結(jié)構(gòu)化語言。如果你想創(chuàng)建一個新的文檔類型,你不用做任何事來告訴數(shù)據(jù)庫關(guān)于這些數(shù)據(jù)的結(jié)構(gòu),而僅僅是存到數(shù)據(jù)庫中即可。簡單的說,MongoDB使用類似JavaScript或PHP的類型處理方式。也就是說,數(shù)據(jù)庫是靈活的弱類型。雖然有一些數(shù)據(jù)是有限制條件的(大塊的數(shù)據(jù)可能需要一些明確的處理),但在大多數(shù)情況下,你可以像寫PHP代

4、碼一樣編寫你的MongoDB代碼。3) 不必去學習另一種查詢語言還記得這些你寫的數(shù)據(jù)庫抽象層嗎?還記得那些你處理過的ORM層嗎?現(xiàn)在,你可以將它們?nèi)縼G棄。在MongoDB中你不需要他們。MongoDB沒有很多查詢語句。在大多數(shù)情況下,只需給它一個數(shù)組指定你想要的信息,然后它會給你返回文檔的數(shù)組。如果你想運行一些非常復雜的查詢(如Map-Reduce操作),可以向MongoDB傳遞JavaScript,其內(nèi)部的JavaScript引擎可以解析這個腳本。4) MongoDB是神速的開發(fā)時間也短,因為沒有結(jié)構(gòu)需要管理和很少(如果有的話)的數(shù)據(jù)映射。學習曲線很平滑,因為沒有新的查詢語言學習。代碼是簡

5、潔的。畢竟,無須任何其他ORM,封裝可以非常簡單。你的代碼是未來的保證。向你的對象增加更多的字段是很輕松的。因此,需求變化了,你可以很快修改代碼以便適應。MongoDB足以讓我意識到它有改變游戲規(guī)則的潛力。這也是讓大家主張使用新一代的文檔數(shù)據(jù)庫代替基于SQL的關(guān)系數(shù)據(jù)庫的原因。將關(guān)系數(shù)據(jù)庫留在塵土里,更可能的是讓它們做它們能做好的事情:存儲屬于行和表的數(shù)據(jù)。n 補充說明:mongodb是用C+開發(fā)的面向文檔的數(shù)據(jù)庫,也就是反傳統(tǒng)的數(shù)據(jù)庫范式來設計的,把相關(guān)的對象都記錄到一個文檔里,每個文檔內(nèi)是schema-free的,也就是列名可以自由定義,比較靈活,特別是面對業(yè)務邏輯多變的應用場景十分給力。

6、數(shù)據(jù)以BSON(類似JSON)的格式二進制存儲。不好的地方就是可能帶來一定的數(shù)據(jù)冗余和存儲開銷。很明顯,MongoDB這種面向文檔的數(shù)據(jù)庫和傳統(tǒng)的關(guān)系型數(shù)據(jù)庫的設計思路是差別很大的,因為每個文檔都包含了所有信息,和其他文檔是沒有關(guān)聯(lián)的,這樣傳統(tǒng)的Join操作就完全沒必要了,也正是因為去除了這種“關(guān)系”,使得MongoDB的水平拆分更加容易,這也是面對海量數(shù)據(jù)的一個很好的處理思路。另外,MongoDB的索引機制和MySQL等數(shù)據(jù)庫是一樣的,可以利用傳統(tǒng)的關(guān)系型數(shù)據(jù)庫的經(jīng)驗來使用MongoDB的索引。不像其他很多NoSQL產(chǎn)品由個別工程師根據(jù)應用場景開發(fā)出來,MongoDB是有一個專門的公司10g

7、en來維護。有一點要注意的是,MongoDB自己是不管理內(nèi)存的,無法指定內(nèi)存大小,完全交給操作系統(tǒng)來管理,因此有時候是不可控的,在生產(chǎn)環(huán)境使用必須在OS層面監(jiān)控內(nèi)存使用情況。2 MongoDB服務器的安裝2.1 源碼版本的安裝mongodb目前最新的版本是.8.2-rc3,其源碼安裝用了很多第三方的東西,比如JS引擎(目前官方推薦的是mozilla的Spider Monkey,以后可能改成google的V8,和node.js一樣,呵呵)、正則表達式引擎(pcre)、安裝構(gòu)建工具scons(這東西還要用python來安裝)、boost C+庫等等。下面是安裝過程:1、下載需要的源文件和相關(guān)軟件包

8、:rootlocalhost mongodb# wget /src/mongodb-src-r1.8.2-rc3.tar.gzrootlocalhost mongodb# wget rootlocalhost mongodb# wget /pub//js/js-1.7.0.tar.gzrootlocalhost mongodb# wget 2、安裝scons:rootlocalhost mongodb# tar zxvf scons-2.1.0.alpha.20101125.t

9、ar.gzrootlocalhost mongodb# cd scons-2.1.0.alpha.20101125rootlocalhost scons-2.1.0.alpha.20101125# 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# m

10、ake install4、安裝Spider Monkey:rootlocalhost mongodb# tar zxvf js-1.7.0.tar.gzrootlocalhost mongodb# cd js/srcrootlocalhost src# export CFLAGS="-DJS_C_STRINGS_ARE_UTF8"rootlocalhost src# make -f Makefile.refrootlocalhost src# JS_DIST=/usr make -f Makefile.ref export5、安裝boost,yum方式比

11、較偷懶:rootlocalhost src# yum -y install boost boost-devel6、安裝mongodb:rootlocalhost mongodb# tar zxvf mongodb-src-r1.8.2-rc3.tar.gzrootlocalhost 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/mong

12、odb -full install這樣就安裝完畢了,可以簡單的啟動mongod進程來驗證一下:這樣就安裝完畢了,可以簡單的啟動mongod進程來驗證一下:rootlocalhost bin# ./mongod -dbpath /tmpWed Jun 8 11:57:38 initandlisten MongoDB starting : pid=29700 port=27017 dbpath=/tmp 64-bitWed Jun 8 11:57:38 initandlisten

13、 db version v1.8.2-rc3, pdfile version 4.5Wed Jun 8 11:57:38 initandlisten git version: nogitversionWed Jun 8 11:57:38 initandlisten build sys info: Linux localhost.localdomain 2.6.18-128.el5 #1 SMP Wed Jan 21 10:41:14 EST 2009 x8

14、6_64 BOOST_LIB_VERSION=1_33_1Wed Jun 8 11:57:38 initandlisten waiting for connections on port 27017Wed Jun 8 11:57:38 websvr web admin interface listening on port 28017可見mongod默認在27017端口監(jiān)聽,而28017端口是web管理的端口,可通過http方式來訪問。為了規(guī)范,我們用以下

15、命令啟動一個mongod進程:rootlocalhost data# /usr/local/mongodb/bin/mongod -fork -dbpath /home/mongo/data/ -logpath /home/mongo/mongo.log -logappend -directoryperdb -journal -rest這樣一個mongod進程就啟動了,它監(jiān)聽27017端口來提供服務,可以在應用程序中進行建立數(shù)據(jù)庫等操作,它不像傳統(tǒng)的Oracle等關(guān)系數(shù)據(jù)庫那樣,建庫是個很慎重的

16、工作。要了解更詳細的使用MongoDB的信息,讀者可以參看官方文檔,這里就不提及了?!娟P(guān)閉】的方法很簡單:Killall mongod 或者是  kill pid2.2 編譯版本安裝2.2.1 MongoDB版本下載MongoDB的官方下載站是/downloads,可以去上面下載最新的程序下來。在下載頁面可以看到,對操作系統(tǒng)支持很全面,OS X、Linux、Windows、Solaris都支持,而且都有各自的32位和64位版本。目前的穩(wěn)定版本是1.8.1版本。注意:1. MongoDB 1.8.1 Linux版要求glibc必須是2

17、.5以上,所以需要先確認操作系統(tǒng)的glibc的版本,筆者最初用Linux AS 4安裝不上,最后用的是RHEL5來安裝才成功的;2. 在32位平臺MongoDB不允許數(shù)據(jù)庫文件(累計總和)超過2G,而64位平臺沒有這個限制。本文都是采用32位系統(tǒng)。2.2.2 Windows版本安裝(1)、下載MongoDBurl地址: /win32/mongodb-win32-i386-1.8.1.zip(2)、設置MongoDB目錄將其解壓到 d:,再重命名為mongodb,路徑為d:mongodb(3)、設置數(shù)據(jù)文件路徑在d:盤建一個db文件夾,路徑d

18、:db(4)、啟動MongoDB服務進入 cmd 提示符控制臺,D:mongodbbinmongod.exe -dbpath=d:datadbD:mongodbbin>D:mongodbbinmongod -dbpath=d:datadbSun Apr 10 22:34:09 initandlisten MongoDB starting : pid=5192 port=27017 dbpath=d:datadb 32-bit* NOTE: when using MongoDB&#

19、160;32 bit, you are limited to about 2 gigabytes of data*       see /post/137788967/32-bit-limitations*       with -dur, the limit is lowerSun Apr 10 22:34:09 

20、;initandlisten db version v1.8.1, pdfile version 4.5Sun Apr 10 22:34:09 initandlisten git version: a429cd4f535b2499cc4130b06ff7c26f41c00f04Sun Apr 10 22:34:09 initandlisten build sys info: windows (5, 1, 2600, 2, 'Service Pack

21、 3') BOOST_LIB_VERSION=1_35Sun Apr 10 22:34:09 initandlisten waiting for connections on port 27017Sun Apr 10 22:34:09 websvr web admin interface listening on port 28017 MongoDB服務端的默認連接端口是 27017(5)、將MongoDB作為 Win

22、dows 服務隨機啟動先創(chuàng)建D:mongodblogsmongodb.log文件,用于存儲MongoDB的日志文件, 再安裝系統(tǒng)服務:D:mongodbbinmongod -dbpath=d:datadb -logpath=d:mongodblogsmongodb.log -installD:mongodbbin>D:mongodbbinmongod -dbpath=d:datadb -logpath=d:mongodblogsmongodb.log -installall output going to: d:mongodblogsmo

23、ngodb.logCreating service MongoDB.Service creation successful.Service can be started from the command line via 'net start "MongoDB"'.D:mongodbbin>net start mongodbMongo DB 服務已經(jīng)啟動成功。D:mongodbbin> (6)、客戶端連接驗證新打開一個CMD輸入:d:mongodbbinmongo,如果出現(xiàn)下面提示,那么您就可以開始Mong

24、oDB之旅了:D:mongodbbin>d:mongodbbinmongoMongoDB shell version: 1.8.1connecting to: test> (7)、查看MongoDB日志查看D:mongodblogsmongodb.log文件,即可對MongoDB的運行情況進行查看或排錯了:這樣就完成了Windows平臺的MongoDB安裝。2.2.3 Linux版安裝(1)、下載MongoDBcurl -O /linux/mongodb-linux-i686-1.8.1.tgz(2)、設

25、置MongoDB目錄將其解壓到/Apps,再重命名為mongodb,路徑為/Apps/mongodb(3)、設置數(shù)據(jù)文件路徑建立/data/db的目錄, mkdir p /data/db(4)、啟動MongoDB服務/Apps/mongodb/bin/mongod -dbpath=/data/dbrootlocalhost # /Apps/mongodb/bin/mongod -dbpath=/data/dbSun Apr  8 22:41:06 initandlisten MongoDB starting : pid=13

26、701 port=27017 dbpath=/data/db 32-bit * NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data*       see /post/137788967/32-bit-limitations* 

27、60;     with -dur, the limit is lowerSun Apr  8 22:41:06 initandlisten db version v1.8.1, pdfile version 4.5Sun Apr  8 22:41:06 initandlisten git version: a429cd4f535b2499cc4130b06ff7c26f41c00f04Sun Apr  8

28、 22:41:06 initandlisten build sys info: Linux bs-linux32.10gen.cc -2.fc8xen #1 SMP Fri Feb 15 12:39:36 EST 2008 i686 BOOST_LIB_VERSION=1_37Sun Apr  8 22:41:06 initandlisten waiting for connections on

29、60;port 27017Sun Apr  8 22:41:06 websvr web admin interface listening on port 28017 MongoDB 服務端的默認連接端口是 27017(5)、將MongoDB作為 Linux 服務隨機啟動先創(chuàng)建/Apps/mongodb/logs/mongodb.log文件,用于存儲MongoDB的日志文件vi /etc/rc.local, 使用vi編輯器打開配置文件,并在其中加入下面一行代碼/Apps/mongodb/bin/

30、mongod -dbpath=/data/db -logpath=/Apps/mongodb/logs/mongodb.log(6)、客戶端連接驗證新打開一個Session輸入:/Apps/mongodb/bin/mongo,如果出現(xiàn)下面提示,那么您就可以開始mongo之旅了rootlocalhost # /Apps/mongodb/bin/mongoMongoDB shell version: 1.8.1connecting to: test> (7)、查看MongoDB日志查看/Apps/mongodb/logs/mongodb.log文件,即

31、可對MongoDB的運行情況進行查看或排錯了rootlocalhost logs# pwd/Apps/mongodb/logsrootlocalhost logs# ll總計 0-rw-r-r- 1 root root 0 04-08 20:15 mongodb.logrootlocalhost logs# 這樣就完成了Linux平臺的MongoDB安裝。n 也可以將mongoDB服務加入隨機啟動vi /etc/rc.local使用vi編輯器打開配置文件,并在其中加入下面一行代碼/home/liwei/mongodb/mongodb-linux-i686-1.6.5/bin

32、/mongod -dbpath=/data/mongodb/db -logpath=/data/mongodb/log/MongoDB.log -logappend3 MongoDB客戶端訪問3.1 Shell方式MongoDB是MongoDB自帶的交互式Javascript shell,用來對MongoDB進行操作和管理的交互式環(huán)境。使用 "./mongo -help" 可查看相關(guān)連接參數(shù),下面將從常見的操作,如插入,查詢,修改,刪除等幾個方面闡述MongoDB shell的用法1、插入記錄> use my_mongodbswitched

33、0;to db my_mongodb> db.user.insert(uid:1,username:"Tom",age:25);> db.user.insert(uid:2,username:"Jerry",age:25);> 本例向數(shù)據(jù)庫my_mongodb的表user中插入了2條記錄。MongoDB會隱式的創(chuàng)建數(shù)據(jù)庫my_mongodb和表user,所以這個例子沒有建庫和建表的過程,可以通過show dbs和show collections來查看數(shù)據(jù)庫及表,具體如下:> sho

34、w dbsadmin   (empty)local   (empty)my_mongodb      0.0625GB    -隱式創(chuàng)建的數(shù)據(jù)庫> show collectionssystem.indexesuser                   

35、      -隱式創(chuàng)建的表>2、查詢記錄查詢表中的全部記錄:>  db.user.find(); "_id" : ObjectId("4f81a49b779282ca68fd8a59"), "uid" : 1, "username" : "Tom", "age" : 25  "_id" : ObjectId("4f81a4a1

36、779282ca68fd8a5a"), "uid" : 2, "username" : "Jerry", "age" : 25 > 查詢用戶名是 ”Jerry” 記錄:> db.user.find(username:"Jerry"); "_id" : ObjectId("4f81a4a1779282ca68fd8a5a"), "uid" : 2, &quo

37、t;username" : "Jerry", "age" : 25 > 3、修改記錄將用戶ID是2的記錄的年齡修改為100:> db.user.update(uid:2,$set:age:100) ;> 查詢一下是否改過來了:>  db.user.find(uid:2); "_id" : ObjectId("4f81a4a1779282ca68fd8a5a"), "uid" : 2,

38、 "username" : "Jerry", "age" : 100 > 4、刪除記錄將用戶ID是1的記錄從表user中刪除:> db.user.remove(uid:1);> db.user.find();  "_id" : ObjectId("4f81a4a1779282ca68fd8a5a"), "uid" : 2, "username" : "Jerr

39、y", "age" : 100 > 經(jīng)驗證,該記錄確實被刪除了。3.2 JAVA方式【IT168 技術(shù)】MongoDB官網(wǎng):/MongoDB J驅(qū)動:/display/DOCS/DriversMongoDB Java文檔:/display/DOCS/Java+Tutorial1、MongoDB 連接:連接數(shù)據(jù)庫如果不存在,會自動生成數(shù)據(jù)庫。import com.mongodb.Mong

40、o;import com.mongodb.DB;import com.mongodb.DBCollection;import com.mongodb.BasicDBObject;import com.mongodb.DBObject;import com.mongodb.DBCursor;Mongo m = new Mongo();/ orMongo m = new Mongo( "localhost" );/ orMongo

41、 m = new Mongo( "localhost" , 27017 );DB db = m.getDB( "mydb" );設置用戶名密碼連接:有就返回true,否則返回false。boolean auth = db.authenticate(myUserName, myPassword);2、MongoDB 獲取所有的數(shù)據(jù)庫Mongo m = new Mongo();for

42、0;(String s : m.getDatabaseNames()System.out.println(s);刪除數(shù)據(jù)庫:Mongo m = new Mongo();m.dropDatabase("myDatabaseName");3、MongoDB表獲取數(shù)據(jù)庫的所有表:Set<String> colls = db.getCollectionNames();for (String s : colls) System.out.println(s);獲取表的索引:List<DBObject

43、> list = coll.getIndexInfo();for (DBObject o : list) System.out.println(o);獲取表的所有記錄:DBCursor cur = coll.find();while(cur.hasNext() System.out.println(cur.next();獲取表的記錄數(shù)量:coll.find().count();coll.find(new BasicDBObject("i", 26).count(); /(可以在f

44、ind里添加條件 )獲取查詢的第一條記錄:DBObject firstDoc = coll.findOne();/findOne() 返回一個記錄,而find()返回的是DBCursor游標對象。 4、查詢條件查詢:BasicDBObject condition = new BasicDBObject();condition.put("name", "bruce");condition.put("age", 26);coll.find(condition)

45、;分頁查詢:DBCursor cursor = coll.find().skip(0).limit(10);while(cursor.hasNext() System.out.println(cursor.next();條件查詢:BasicDBObject condition = new BasicDBObject();condition.put("age", new BasicDBObject("$gt", 50);coll.find(condition);比較符"

46、;$gt": 大于"$gte":大于等于"$lt": 小于"$lte":小于等于"$in": 包含/以下條件查詢20<age<=30condition.put("age", new BasicDBObject("$gt", 20).append("$lte", 30);$exists用來判斷一個元素是否存在,如:db.things.find( a:$exists:true); /

47、60;如果存在元素a,就返回true$type基于 bson type來匹配一個元素的類型,像是按照類型ID來匹配,不過我沒找到bson類型和id對照表。db.things.find(a:$type:2); / matches if a is a string正則表達式查詢所有名字匹配 /joh?n/i 的記錄。Pattern pattern = Ppile("joh?n", CASE_INSENSITIVE); BasicDBObject query = new BasicDBObject(&

48、quot;name", pattern); DBCursor cursor = coll.find(query);5、數(shù)據(jù)插入批量插入:List datas = new ArrayList();for (int i=0; i < 100; i+) BasicDBObject bo = new BasicDBObject();bo.put("name", "bruce");bo.append("

49、;age", i);datas.add(bo);coll.insert(datas);單個插入:BasicDBObject doc = new BasicDBObject();doc.put("name", "MongoDB");doc.put("type", "database");doc.put("count", 1);BasicDBObject info = new BasicDBObjec

50、t();info.put("x", 203);info.put("y", 102);doc.put("info", info);coll.insert(doc);6、索引coll.createIndex(new BasicDBObject("i", 1); / create index on "i", ascending -1 descending獲取所有的索引:List<DBObject> list =

51、 coll.getIndexInfo();for (DBObject o : list) System.out.println(o);3.3 索引的用法索引能提高檢索數(shù)據(jù)的速度,你可以想像成在MySQL中創(chuàng)建索引一樣,同樣索引也是用B-Tree也實現(xiàn)的。1.單列索引在字段x上創(chuàng)建索引,1 (ascending) or -1 (descending)> db.data.ensureIndex(x:1)  顯示表data里面的所有索引1. > db.data.getIndexes()  2.  3. 

52、60;4. "name" : "_id_",  5. "ns" : "recommender.data",  6. "key" :   7. "_id" : 1  8.  9. ,  10.  11. "_id" : ObjectId("4befb146b0e29ba1ce20e

53、0bb"),  12. "ns" : "recommender.data",  13. "key" :   14. "x" : 1  15. ,  16. "name" : "x_1"  17.  18.   查找字段x為6的值,此時已經(jīng)用到索引了> db.data.find(x:6

54、)   "_id" : ObjectId("4bee804ba23d558eb6687117"), "x" : 6, "name" : "caihuafeng1"    "_id" : ObjectId("4bee804ba23d558eb6687118"), "x" 

55、: 6, "name" : "caihuafeng2"    "_id" : ObjectId("4bee804ba23d558eb6687119"), "x" : 6, "name" : "caihuafeng3"    "_id" : 

56、ObjectId("4bee804ba23d558eb668711a"), "x" : 6, "name" : "caihuafeng4"    "_id" : ObjectId("4bee804ba23d558eb668711b"), "x" : 6, "name" :

57、0;"caihuafeng5"    "_id" : ObjectId("4bee804ba23d558eb668711c"), "x" : 6, "name" : "caihuafeng6"    "_id" : ObjectId("4bee804ba23d558eb668711d&qu

58、ot;), "x" : 6, "name" : "caihuafeng7"    "_id" : ObjectId("4bee804ba23d558eb668711e"), "x" : 6, "name" : "caihuafeng8"   

59、0;"_id" : ObjectId("4bee804ba23d558eb668711f"), "x" : 6, "name" : "caihuafeng9"    "_id" : ObjectId("4bee804ba23d558eb6687120"), "x" : 6,

60、60;"name" : "caihuafeng10"   2.默認索引上述1中db.data.getIndexes()顯示出來的一共有2個索引,其中_id是創(chuàng)建表的時候自動創(chuàng)建的索引,此索引是不能夠刪除的。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的

61、官方文檔上面是這樣說的:Documents as KeysIndexed fields may be 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:"  3. > db.data.insert(name:"ll4

62、la",info:url:"對字段info創(chuàng)建索引1. > db.data.ensureIndex(info: 1);  顯示表data上的所有索引1. > db.data.getIndexes();  2.  3.  4. "name" : "_id_",  5. "ns" : "recommender.data",  6. "key

63、" :   7. "_id" : 1  8.  9. ,  10.  11. "_id" : ObjectId("4befb146b0e29ba1ce20e0bb"),  12. "ns" : "recommender.data",  13. "key" :   14. "x&q

64、uot; : 1  15. ,  16. "name" : "x_1"  17. ,  18.  19. "_id" : ObjectId("4befb76bb0e29ba1ce20e0bf"),  20. "ns" : "recommender.data",  21. "key" : 

65、 22. "info" : 1  23. ,  24. "name" : "info_1"  25.  26.   查找指定的記錄,此時會用到索引> db.data.find(info: url:"   "_id" : ObjectId("4befb711b0e29ba1ce20e0bc"), &quo

66、t;name" : "1616", "info" :  "url" : "b.組合索引建立組合索引> db.data.ensureIndex("info.url":1, "info.city":1);  > db.data.getIndexes();      "name" : 

67、;"_id_",  "ns" : "recommender.data",  "key" :   "_id" : 1    ,    "_id" : ObjectId("4befb146b0e29ba1ce20e0bb"),  "ns" : "reco

68、mmender.data",  "key" :   "x" : 1  ,  "name" : "x_1"  ,    "_id" : ObjectId("4befb76bb0e29ba1ce20e0bf"),  "ns" : "recommender.data

69、",  "key" :   "info" : 1  ,  "name" : "info_1"  ,    "_id" : ObjectId("4befb9d1b0e29ba1ce20e0c0"),  "ns" : "recommender.data"

70、,  "key" :   "info.url" : 1,  "info.city" : 1  ,  "name" : "info.url_1_info.city_1"      下面幾個操作均會用到索引> db.data.find("info.url": "  &

71、#160;"_id" : ObjectId("4befb711b0e29ba1ce20e0bc"), "name" : "1616", "info" :  "url" : "     > db.data.find("info.url": "   &quo

72、t;_id" : ObjectId("4befb711b0e29ba1ce20e0bc"), "name" : "1616", "info" :  "url" : "1表示升序(asc),-1表示降序(desc)> db.data.find("info.url": /http:*/i).sort("info.ur

73、l": 1, "info.city": 1);   "_id" : ObjectId("4befb740b0e29ba1ce20e0be"), "name" : "ll4la", "info" :  "url" : "   "_id"

74、60;: ObjectId("4befb711b0e29ba1ce20e0bc"), "name" : "1616", "info" :  "url" : "   "_id" : ObjectId("4befb723b0e29ba1ce20e0bd"), "name" : "hao123", "info" :&#

溫馨提示

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

最新文檔

評論

0/150

提交評論