MangoDB索引、排序和聚合
目錄
MongoDB Limit與Skip方法
MongoDB Limit() 方法
語法
實(shí)例
MongoDB Skip() 方法
語法
實(shí)例
MongoDB 排序
MongoDB sort() 方法
語法
實(shí)例
MongoDB 索引
createIndex() 方法
語法
實(shí)例
實(shí)例
MongoDB 聚合
aggregate() 方法
語法
實(shí)例
MongoDB Limit與Skip方法
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月推出的高級程序設(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ù)。
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 。
MongoDB 排序
MongoDB sort() 方法
在 MongoDB 中使用 sort() 方法對數(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月推出的高級程序設(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 教程" }// 返回指定的title的鍵值skip(), limilt(), sort()三個(gè)放在一起執(zhí)行的時(shí)候,執(zhí)行的順序是先 sort(), 然后是 skip(),最后是顯示的 limit()。
MongoDB 索引
索引通常能夠極大的提高查詢的效率,如果沒有索引,MongoDB在讀取數(shù)據(jù)時(shí)必須掃描集合中的每個(gè)文件并選取那些符合查詢條件的記錄。
這種掃描全集合的查詢效率是非常低的,特別在處理大量的數(shù)據(jù)時(shí),查詢可以要花費(fèi)幾十秒甚至幾分鐘,這對網(wǎng)站的性能是非常致命的。
索引是特殊的數(shù)據(jù)結(jié)構(gòu),索引存儲在一個(gè)易于遍歷讀取的數(shù)據(jù)集合中,索引是對數(shù)據(jù)庫表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu)
createIndex() 方法
MongoDB使用 createIndex() 方法來創(chuàng)建索引。
注意在 3.0.0 版本前創(chuàng)建索引方法為 db.collection.ensureIndex(),之后的版本使用了 db.collection.createIndex() 方法,ensureIndex() 還能用,但只是 createIndex() 的別名。
語法
createIndex()方法基本語法格式如下所示:
db.collection.createIndex(keys, options)?語法中 Key 值為你要?jiǎng)?chuàng)建的索引字段,1 為指定按升序創(chuàng)建索引,如果你想按降序來創(chuàng)建索引指定為 -1 即可。
實(shí)例
db.col.createIndex({"title":1})createIndex() 方法中你也可以設(shè)置使用多個(gè)字段創(chuàng)建索引(關(guān)系型數(shù)據(jù)庫中稱作復(fù)合索引)
db.col.createIndex({"title":1,"description":-1})createIndex() 接收可選參數(shù),可選參數(shù)列表如下:
| background | Boolean | 建索引過程會(huì)阻塞其它數(shù)據(jù)庫操作,background可指定以后臺方式創(chuàng)建索引,即增加 "background" 可選參數(shù)。 "background" 默認(rèn)值為false。 |
| unique | Boolean | 建立的索引是否唯一。指定為true創(chuàng)建唯一索引。默認(rèn)值為false. |
| name | string | 索引的名稱。如果未指定,MongoDB的通過連接索引的字段名和排序順序生成一個(gè)索引名稱。 |
| dropDups | Boolean | 3.0+版本已廢棄。在建立唯一索引時(shí)是否刪除重復(fù)記錄,指定 true 創(chuàng)建唯一索引。默認(rèn)值為 false. |
| sparse | Boolean | 對文檔中不存在的字段數(shù)據(jù)不啟用索引;這個(gè)參數(shù)需要特別注意,如果設(shè)置為true的話,在索引字段中不會(huì)查詢出不包含對應(yīng)字段的文檔.。默認(rèn)值為 false. |
| expireAfterSeconds | integer | 指定一個(gè)以秒為單位的數(shù)值,完成 TTL設(shè)定,設(shè)定集合的生存時(shí)間。 |
| v | index version | 索引的版本號。默認(rèn)的索引版本取決于mongod創(chuàng)建索引時(shí)運(yùn)行的版本。 |
| weights | document | 索引權(quán)重值,數(shù)值在 1 到 99,999 之間,表示該索引相對于其他索引字段的得分權(quán)重。 |
| default_language | string | 對于文本索引,該參數(shù)決定了停用詞及詞干和詞器的規(guī)則的列表。 默認(rèn)為英語 |
| language_override | string | 對于文本索引,該參數(shù)指定了包含在文檔中的字段名,語言覆蓋默認(rèn)的language,默認(rèn)值為 language. |
實(shí)例
在后臺創(chuàng)建索引:
db.values.createIndex({open: 1, close: 1}, {background: true})1、查看集合索引
db.col.getIndexes()2、查看集合索引大小
db.col.totalIndexSize()3、刪除集合所有索引
db.col.dropIndexes()4、刪除集合指定索引
db.col.dropIndex("索引名稱")MongoDB 聚合
MongoDB 中聚合(aggregate)主要用于處理數(shù)據(jù)(諸如統(tǒng)計(jì)平均值,求和等),并返回計(jì)算后的數(shù)據(jù)結(jié)果。
有點(diǎn)類似 SQL 語句中的 count(*)。
aggregate() 方法
MongoDB中聚合的方法使用aggregate()。
語法
aggregate() 方法的基本語法格式如下所示:
db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)實(shí)例
集合中的數(shù)據(jù)如下:
現(xiàn)在我們通過以上集合計(jì)算每個(gè)作者所寫的文章數(shù),使用aggregate()計(jì)算結(jié)果如下:
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}]) {"result" : [{"_id" : "runoob.com","num_tutorial" : 2},{"_id" : "Neo4j","num_tutorial" : 1}],"ok" : 1 }以上實(shí)例類似sql語句:?
select by_user, count(*) from mycol group by by_user {_id: ObjectId(7df78ad8902c)title: 'MongoDB Overview', description: 'MongoDB is no sql database',by_user: 'runoob.com',url: 'http://www.runoob.com',tags: ['mongodb', 'database', 'NoSQL'],likes: 100 }, {_id: ObjectId(7df78ad8902d)title: 'NoSQL Overview', description: 'No sql database is very fast',by_user: 'runoob.com',url: 'http://www.runoob.com',tags: ['mongodb', 'database', 'NoSQL'],likes: 10 }, {_id: ObjectId(7df78ad8902e)title: 'Neo4j Overview', description: 'Neo4j is no sql database',by_user: 'Neo4j',url: 'http://www.neo4j.com',tags: ['neo4j', 'database', 'NoSQL'],likes: 750 },總結(jié)
以上是生活随笔為你收集整理的MangoDB索引、排序和聚合的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [剑指offer][JAVA]面试题第[
- 下一篇: 干不掉的钉钉:从哪来,往哪去?