mongodb中的排序和索引快速学习
在mongodb中,排序和索引其实都是十分容易的,先来小结下排序:
1 先插入些数据
db.SortTest.insert( { name : "Denis", age : 20 } )
db.SortTest.insert( { name : "Abe", age : 30 } )
db.SortTest.insert( { name : "John", age : 40 } )
db.SortTest.insert( { name : "Xavier", age : 10 } )
db.SortTest.insert( { name : "Zen", age : 50 } )
2 然后默认检索一下
db.SortTest.find()
{ "_id" : ObjectId("50f6811c03141917bce6459f"), "name" : "Denis", "age" : 20 }
{ "_id" : ObjectId("50f6811d03141917bce645a0"), "name" : "Abe", "age" : 30 }
{ "_id" : ObjectId("50f6811d03141917bce645a1"), "name" : "John", "age" : 40 }
{ "_id" : ObjectId("50f6811d03141917bce645a2"), "name" : "Xavier", "age" : 10 }
{ "_id" : ObjectId("50f6811e03141917bce645a3"), "name" : "Zen", "age" : 50 }
排序的话,注意1是升序,-1是降序,如下:
db.SortTest.find().sort({name: -1}) ,则对name字段降序
{ "_id" : ObjectId("50f6811e03141917bce645a3"), "name" : "Zen", "age" : 50 }
{ "_id" : ObjectId("50f6811d03141917bce645a2"), "name" : "Xavier", "age" : 10 }
{ "_id" : ObjectId("50f6811d03141917bce645a1"), "name" : "John", "age" : 40 }
{ "_id" : ObjectId("50f6811c03141917bce6459f"), "name" : "Denis", "age" : 20 }
{ "_id" : ObjectId("50f6811d03141917bce645a0"), "name" : "Abe", "age" : 30 }
可以同时多个字段的排列,比如:
db.SortTest.find().sort( { age: -1 , name: 1} );
3 关于索引
首先,mongodb的是B-tree的索引了。要注意的是,一个collection不能超过64个索引,
索引的大小不能超过1024字节,其中包括字段名和值和命名空间。
首先照样创建数据:
db.Indexing.insert( { name : "Denis", age : 20 } )
db.Indexing.insert( { name : "Abe", age : 30 } )
db.Indexing.insert( { name : "John", age : 40 } )
db.Indexing.insert( { name : "Xavier", age : 10 } )
db.Indexing.insert( { name : "Zen", age : 50 } )
首先,尝试看下mongodb的执行计划:
db.Indexing.find({name: "Denis"}).explain(),这个是看当查找Denis的执行情况,
结果如下:
{
"cursor" : "BasicCursor",
"isMultiKey" : false,
"n" : 0,
"nscannedObjects" : 0,
"nscanned" : 0,
"nscannedObjectsAllPlans" : 0,
"nscannedAllPlans" : 0,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 0,
"indexBounds" : {
},
"server" : "Denis:27017"
}
下面加个索引,如下:
db.Indexing.ensureIndex({name: 1});
其中依然,1是升序,-1是降序,再看下执行计划:
db.Indexing.find({name: "Denis"}).explain()
结果为:
{
"cursor" : "BtreeCursor name_1",
"isMultiKey" : false,
"n" : 1,
"nscannedObjects" : 1,
"nscanned" : 1,
"nscannedObjectsAllPlans" : 1,
"nscannedAllPlans" : 1,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 1,
"indexBounds" : {
"name" : [
[
"Denis",
"Denis"
]
]
},
"server" : "Denis:27017"
}
可以看到,"cursor" 一栏中,已经变成了btree了;并且"indexBounds" :中现在有内容了。
然后可以删除索引:
db.Indexing.dropIndex({name: 1});
删除所有索引
4 创建唯一索引
db.Indexing.ensureIndex({name: 1}, {unique: true});
也就是加上{unique: true}就可以了
5 创建复合索引
比如要创建name和age的复合索引,直接如下
db.Indexing.ensureIndex({name: 1, age : 1});
如果要复合唯一索引,则:
db.Indexing.ensureIndex({name: 1, age : 1}, {unique: true})
同样要注意的是,复合索引,要一起用才有效果,比如:
db.Indexing.find({name: "Denis"}).explain(),只按一个NAME,索引使用情况为:
{
"cursor" : "BtreeCursor name_1_age_1",
"isMultiKey" : false,
"n" : 1,
"nscannedObjects" : 1,
"nscanned" : 1,
"nscannedObjectsAllPlans" : 1,
"nscannedAllPlans" : 1,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 0,
"indexBounds" : {
"name" : [
[
"Denis",
"Denis"
]
],
"age" : [
[
{
"$minElement" : 1
},
{
"$maxElement" : 1
}
]
]
},
"server" : "Denis:27017"
}
如果db.Indexing.find({age: "20"}).explain(),则没能使用索引
{
"cursor" : "BasicCursor",
"isMultiKey" : false,
"n" : 0,
"nscannedObjects" : 5,
"nscanned" : 5,
"nscannedObjectsAllPlans" : 5,
"nscannedAllPlans" : 5,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 0,
"indexBounds" : {
},
"server" : "Denis:27017"
}
mongodb中的排序和索引快速学习的更多相关文章
- 在MongoDB中执行查询、创建索引
1. MongoDB中数据查询的方法 (1)find函数的使用: (2)条件操作符: (3)distinct找出给定键所有不同的值: (4)group分组: (5)游标: (6)存储过程. 文档查找 ...
- 在MongoDB中执行查询与创建索引
实验目的: (1)掌握MongoDB中数据查询的方法: (2)掌握MongoDB中索引及其创建: 实验内容: 一. MongoDB中数据查询的方法: (1)find函数的使用: (2)条件操作符: a ...
- MongoDB索引05-30学习笔记
MongoDB 索引 索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录. 这种扫描全集合的查询效率是非常低的,特别在处理大 ...
- oracle中索引快速全扫描和索引全扫描的区别
当进行index full scan的时候 oracle定位到索引的root block,然后到branch block(如果有的话),再定位到第一个leaf block, 然后根据leaf bloc ...
- mongodb中分页显示数据集的学习
这次继续看mongodb中的分页.首先依然是插入数据: 1) db.Blog.insert( { name : "Denis", age : 20, city : "P ...
- MongoDB 大数据技术之mongodb中在嵌套子文档的文档上面建立索引
一.给collection objectid赋自定义的值 MongoDB Enterprise > db.testid.insert({_id:{imsi:"4567890123&qu ...
- MongoDB快速学习笔记
一,下载. XP系统,32位的下载地址: https://www.mongodb.org/dl/win32/i386 例:win32/mongodb-win32-i386-2.0.7.ziphttp: ...
- MongoDB中的映射,限制记录和记录拼排序 文档的插入查询更新删除操作
映射 在 MongoDB 中,映射(Projection)指的是只选择文档中的必要数据,而非全部数据.如果文档有 5 个字段,而你只需要显示 3 个,则只需选择 3 个字段即可. find() 方法 ...
- js_html_input中autocomplete="off"在chrom中失效的解决办法 使用JS模拟锚点跳转 js如何获取url参数 C#模拟httpwebrequest请求_向服务器模拟cookie发送 实习期学到的技术(一) LinqPad的变量比较功能 ASP.NET EF 使用LinqPad 快速学习Linq
js_html_input中autocomplete="off"在chrom中失效的解决办法 分享网上的2种办法: 1-可以在不需要默认填写的input框中设置 autocompl ...
随机推荐
- sqlserver 存储过程实例
ALTER PROC [dbo].[SP_mm_NS] ( @ID NVARCHAR(60), @ReturnCode NVARCHAR(30) OUT ...
- 调用QQ截图
var SHExecInfo: SHELLEXECUTEINFO; begin //截图前隐藏主程序窗口 Form1.Hide; //等待截图执行完成 SHExecInfo.cbSize := siz ...
- Delphi + Asm - TBits类的学习
技术交流,DH讲解. 在D2010的classes中有个TBits类,这个类主要是位操作的. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 TBits = class privat ...
- js 动态切换视频
如图所示,想要一个这样的效果,就是点击下面视频标题时,上面的视频跟着切换,但是要求页面不重新加载. 参考文章在这里 这里贴上部分代码供大家参考. <li id="about_li6&q ...
- 通过判断浏览器的userAgent,用正则来判断是否是ios和Android客户端
<script type="text/javascript">var u = navigator.userAgent, app = navigator.appVersi ...
- 重载(overload),覆盖/重写(override),隐藏(hide)
写正题之前,先给出几个关键字的中英文对照,重载(overload),覆盖/重写(override),隐藏(hide).在早期的C++书籍中,常常把重载(overload)和覆盖(override)搞错 ...
- linux下的php网站放到Windows服务器IIS下.htaccess文件伪静态规则转换
此办法只适合于linux下的php网站放到Windows服务器IIS下 , 网站除了主页面正常以外 子页面全部出现404错误 这里子页面出现404 错误是说明伪静态没有开启 什么是.htac ...
- 积累的VC编程小技巧之滚动条
1.设置滚动条的滚动大小 创建一个基于CScrollview的SDI Project(在第6步中选CScrollview) 若你已创建了,这步可以省略. 然后: 改为如 void CTestView: ...
- Lucene.Net 2.3.1开发介绍 —— 四、搜索(一)
原文:Lucene.Net 2.3.1开发介绍 -- 四.搜索(一) 既然是内容筛选,或者说是搜索引擎,有索引,必然要有搜索.搜索虽然与索引有关,那也只是与索引后的文件有关,和索引的程序是无关的,因此 ...
- 基于Adaboost的人脸检测算法
AdaBoost算法是一种自适应的Boosting算法,基本思想是选取若干弱分类器,组合成强分类器.根据人脸的灰度分布特征,AdaBoost选用了Haar特征[38].AdaBoost分类器的构造过程 ...