mongoDB常见的查询索引(三)
1. _id索引
| 
 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
 | 
> db.jerome_2.collection.insert({x:2})WriteResult({ "nInserted" : 1 })> db.jerome_2.collection.getIndexes()[    {        "v" : 1,        "key" : {            "_id" : 1        },        "name" : "_id_",        "ns" : "jerome.jerome_2.collection"    }]> db.jerome_2.collection.findOne(){ "_id" : ObjectId("557004f1f2824fa15224e20b"), "x" : 2 }>  | 
2. 单键索引
| 
 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
 | 
> db.jerome_2.collection.ensureIndex({x:1}){    "createdCollectionAutomatically" : false,    "numIndexesBefore" : 1,    "numIndexesAfter" : 2,    "ok" : 1}> db.jerome_2.collection.getIndexes()[    {        "v" : 1,        "key" : {            "_id" : 1        },        "name" : "_id_",        "ns" : "jerome.jerome_2.collection"    },    {        "v" : 1,        "key" : {            "x" : 1        },        "name" : "x_1",        "ns" : "jerome.jerome_2.collection"    }]> db.jerome_2.collection.find({x:1}){ "_id" : ObjectId("557005a5f2824fa15224e20c"), "x" : 1, "y" : 2, "z" : 3 }>  | 
3. 多建索引
| 
 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
 | 
> db.jerome_2.collection.getIndexes()[    {        "v" : 1,        "key" : {            "_id" : 1        },        "name" : "_id_",        "ns" : "jerome.jerome_2.collection"    },    {        "v" : 1,        "key" : {            "x" : 1        },        "name" : "x_1",        "ns" : "jerome.jerome_2.collection"    }]> db.jerome_2.collection.find(){ "_id" : ObjectId("557004f1f2824fa15224e20b"), "x" : 2 }{ "_id" : ObjectId("557005a5f2824fa15224e20c"), "x" : 1, "y" : 2, "z" : 3 }> db.jeroem_2.collection.insert({x:[1,2,3,4,5]})WriteResult({ "nInserted" : 1 }) | 
4. 复合索引
| 
 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
 | 
> db.jerome_2.collection.ensureIndex({x:1,y:1}){    "createdCollectionAutomatically" : false,    "numIndexesBefore" : 2,    "numIndexesAfter" : 3,    "ok" : 1}> db.jerome_2.collection.find({x:1,y:2}){ "_id" : ObjectId("557005a5f2824fa15224e20c"), "x" : 1, "y" : 2, "z" : 3 }>  | 
5. 过期索引
| 
 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
 | 
> db.jerome_2.collection.ensureIndex({time:1},{expireAfterSeconds:30}){    "createdCollectionAutomatically" : false,    "numIndexesBefore" : 3,    "numIndexesAfter" : 4,    "ok" : 1}> db.jerome_2.collection.insert({time:new Date()})WriteResult({ "nInserted" : 1 })> db.jerome_2.collection.find(){ "_id" : ObjectId("557004f1f2824fa15224e20b"), "x" : 2 }{ "_id" : ObjectId("557005a5f2824fa15224e20c"), "x" : 1, "y" : 2, "z" : 3 }{ "_id" : ObjectId("55700b17f2824fa15224e20e"), "time" : ISODate("2015-06-04T08:23:51.531Z") }> db.jerome_2.collection.find(){ "_id" : ObjectId("557004f1f2824fa15224e20b"), "x" : 2 }{ "_id" : ObjectId("557005a5f2824fa15224e20c"), "x" : 1, "y" : 2, "z" : 3 }{ "_id" : ObjectId("55700b17f2824fa15224e20e"), "time" : ISODate("2015-06-04T08:23:51.531Z") }> db.jerome_2.collection.find(){ "_id" : ObjectId("557004f1f2824fa15224e20b"), "x" : 2 }{ "_id" : ObjectId("557005a5f2824fa15224e20c"), "x" : 1, "y" : 2, "z" : 3 }>  | 
6.全文索引
| 
 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
 | 
> db.jerome_2.ensureIndex({"article":"text"}){    "createdCollectionAutomatically" : true,    "numIndexesBefore" : 1,    "numIndexesAfter" : 2,    "ok" : 1}> db.jerome_2.insert({"article":"aa bb cc dd ee"})WriteResult({ "nInserted" : 1 })> db.jerome_2.insert({"article":"aa bb rr gg zz"})WriteResult({ "nInserted" : 1 })> db.jerome_2.insert({"article":"aa bb"})WriteResult({ "nInserted" : 1 })> db.jerome_2.insert({"article":"aa bb cc zz ff ww"})WriteResult({ "nInserted" : 1 })> db.jerome_2.find({$text:{$search:"aa"}}){ "_id" : ObjectId("5572904271c0bbd90f4ce0e2"), "article" : "aa bb rr gg zz" }{ "_id" : ObjectId("5572903371c0bbd90f4ce0e1"), "article" : "aa bb cc dd ee" }{ "_id" : ObjectId("5572905671c0bbd90f4ce0e4"), "article" : "aa bb cc zz ff ww" }{ "_id" : ObjectId("5572904771c0bbd90f4ce0e3"), "article" : "aa bb" }> db.jerome_2.find({$text:{$search:"ff"}}){ "_id" : ObjectId("5572905671c0bbd90f4ce0e4"), "article" : "aa bb cc zz ff ww" }> db.jerome_2.find({$text:{$search:"aa bb cc"}}){ "_id" : ObjectId("5572904271c0bbd90f4ce0e2"), "article" : "aa bb rr gg zz" }{ "_id" : ObjectId("5572903371c0bbd90f4ce0e1"), "article" : "aa bb cc dd ee" }{ "_id" : ObjectId("5572905671c0bbd90f4ce0e4"), "article" : "aa bb cc zz ff ww" }{ "_id" : ObjectId("5572904771c0bbd90f4ce0e3"), "article" : "aa bb" }> db.jerome_2.find({$text:{$search:"aa bb -cc"}}){ "_id" : ObjectId("5572904271c0bbd90f4ce0e2"), "article" : "aa bb rr gg zz" }{ "_id" : ObjectId("5572904771c0bbd90f4ce0e3"), "article" : "aa bb" }> db.jerome_2.find({$text:{$search:"\"aa\" \"bb\" \"cc\""}}){ "_id" : ObjectId("5572903371c0bbd90f4ce0e1"), "article" : "aa bb cc dd ee" }{ "_id" : ObjectId("5572905671c0bbd90f4ce0e4"), "article" : "aa bb cc zz ff ww" }>  | 
| 
 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
 | 
> db.jerome_2.find({$text:{$search:"aa bb"}},{score:{$meta:"textScore"}}){ "_id" : ObjectId("5572904271c0bbd90f4ce0e2"), "article" : "aa bb rr gg zz", "score" : 1.2 }{ "_id" : ObjectId("5572903371c0bbd90f4ce0e1"), "article" : "aa bb cc dd ee", "score" : 1.2 }{ "_id" : ObjectId("5572905671c0bbd90f4ce0e4"), "article" : "aa bb cc zz ff ww", "score" : 1.1666666666666667 }{ "_id" : ObjectId("5572904771c0bbd90f4ce0e3"), "article" : "aa bb", "score" : 1.5 }> db.jerome_2.find({$text:{$search:"aa bb"}},{score:{$meta:"textScore"}}).sort({score:{$meta:"textScore"}}){ "_id" : ObjectId("5572904771c0bbd90f4ce0e3"), "article" : "aa bb", "score" : 1.5 }{ "_id" : ObjectId("5572903371c0bbd90f4ce0e1"), "article" : "aa bb cc dd ee", "score" : 1.2 }{ "_id" : ObjectId("5572904271c0bbd90f4ce0e2"), "article" : "aa bb rr gg zz", "score" : 1.2 }{ "_id" : ObjectId("5572905671c0bbd90f4ce0e4"), "article" : "aa bb cc zz ff ww", "score" : 1.1666666666666667 }>  | 
7.地理位置索引
2d索引
| 
 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
 | 
> db.location.ensureIndex({"w":"2d"}) #创建2d索引> db.location.insert({w:[1,1]}) #插入测试数据WriteResult({ "nInserted" : 1 })> db.location.insert({w:[1,2]})WriteResult({ "nInserted" : 1 })> db.location.insert({w:[2,3]})WriteResult({ "nInserted" : 1 })> db.location.insert({w:[100,80]})WriteResult({ "nInserted" : 1 })> db.location.find({w:{$near:[1,1]}}) #会返回100个,理你最近的点{ "_id" : ObjectId("5572a961aba41684d6e8826c"), "w" : [ 1, 1 ] }{ "_id" : ObjectId("5572a965aba41684d6e8826d"), "w" : [ 1, 2 ] }{ "_id" : ObjectId("5572a970aba41684d6e8826e"), "w" : [ 2, 3 ] }{ "_id" : ObjectId("5572a97aaba41684d6e8826f"), "w" : [ 100, 80 ] }> db.location.find({w:{$near:[1,1],$maxDistance:2}}) #可以使用maxDistance限制(near不能使用minDistance){ "_id" : ObjectId("5572a961aba41684d6e8826c"), "w" : [ 1, 1 ] }{ "_id" : ObjectId("5572a965aba41684d6e8826d"), "w" : [ 1, 2 ] } | 
| 
 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
 | 
> db.location.find({w:{$geoWithin:{$box:[[0,0],[3,3]]}}}) #矩形{ "_id" : ObjectId("5572a965aba41684d6e8826d"), "w" : [ 1, 2 ] }{ "_id" : ObjectId("5572a970aba41684d6e8826e"), "w" : [ 2, 3 ] }{ "_id" : ObjectId("5572a961aba41684d6e8826c"), "w" : [ 1, 1 ] }> db.location.find({w:{$geoWithin:{$box:[[1,2],[2,3]]}}}){ "_id" : ObjectId("5572a965aba41684d6e8826d"), "w" : [ 1, 2 ] }{ "_id" : ObjectId("5572a970aba41684d6e8826e"), "w" : [ 2, 3 ] }> db.location.find({w:{$geoWithin:{$center:[[0,0],100]}}}) #圆形,100是半径{ "_id" : ObjectId("5572a961aba41684d6e8826c"), "w" : [ 1, 1 ] }{ "_id" : ObjectId("5572a970aba41684d6e8826e"), "w" : [ 2, 3 ] }{ "_id" : ObjectId("5572a965aba41684d6e8826d"), "w" : [ 1, 2 ] }> db.location.find({w:{$geoWithin:{$center:[[0,0],1000]}}}){ "_id" : ObjectId("5572a961aba41684d6e8826c"), "w" : [ 1, 1 ] }{ "_id" : ObjectId("5572a97aaba41684d6e8826f"), "w" : [ 100, 80 ] }{ "_id" : ObjectId("5572a970aba41684d6e8826e"), "w" : [ 2, 3 ] }{ "_id" : ObjectId("5572a965aba41684d6e8826d"), "w" : [ 1, 2 ] }> db.location.find({w:{$geoWithin:{$polygon:[[0,0],[0,1],[2,5],[6,1]]}}}) #多边形查询(各个点围成的多边形的范围){ "_id" : ObjectId("5572a970aba41684d6e8826e"), "w" : [ 2, 3 ] }{ "_id" : ObjectId("5572a961aba41684d6e8826c"), "w" : [ 1, 1 ] }{ "_id" : ObjectId("5572a965aba41684d6e8826d"), "w" : [ 1, 2 ] }> db.location.find({w:{$geoWithin:{$polygon:[[0,0],[0,1],[2,5],[6,1000],[1001,0]]}}}){ "_id" : ObjectId("5572a970aba41684d6e8826e"), "w" : [ 2, 3 ] }{ "_id" : ObjectId("5572a97aaba41684d6e8826f"), "w" : [ 100, 80 ] }{ "_id" : ObjectId("5572a961aba41684d6e8826c"), "w" : [ 1, 1 ] }{ "_id" : ObjectId("5572a965aba41684d6e8826d"), "w" : [ 1, 2 ] } | 
| 
 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
 | 
> db.runCommand({geoNear:"location",near:[1,2],maxDistance:10,num:1}){    "results" : [        {            "dis" : 0,            "obj" : {                "_id" : ObjectId("5572a965aba41684d6e8826d"),                "w" : [                    1,                    2                ]            }        }    ],    "stats" : {        "nscanned" : NumberLong(1),        "objectsLoaded" : NumberLong(1),        "avgDistance" : 0,        "maxDistance" : 0,        "time" : 2    },    "ok" : 1}>  | 
球面地理位置索引
创建索引比较重要属性介绍
| 
 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
 | 
> db.jerome_2.ensureIndex({x:1})> db.jerome_2.ensureIndex({y:-1})> db.jerome_2.getIndexes()[    {        "v" : 1,        "key" : {            "_id" : 1        },        "name" : "_id_",        "ns" : "jerome.jerome_2"    },    {        "v" : 1,        "key" : {            "x" : 1        },        "name" : "x_1",        "ns" : "jerome.jerome_2"    },    {        "v" : 1,        "key" : {            "y" : -1        },        "name" : "y_-1",        "ns" : "jerome.jerome_2"    } | 
| 
 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
 | 
> db.jerome_2.ensureIndex({x:1,y:-1})> db.jerome_2.ensureIndex({x:1,y:-1,z:1})> db.jerome_2.getIndexes()[    {        "v" : 1,        "key" : {            "x" : 1,            "y" : -1        },        "name" : "x_1_y_-1",        "ns" : "jerome.jerome_2"    },    {        "v" : 1,        "key" : {            "x" : 1,            "y" : -1,            "z" : 1        },        "name" : "x_1_y_-1_z_1",        "ns" : "jerome.jerome_2"    }] | 
| 
 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
 | 
> db.jerome_2.ensureIndex({x:1,y:1,z:1,m:1},{name:"normal_index"})> db.jerome_2.getIndexes()[    {        "v" : 1,        "key" : {            "x" : 1,            "y" : 1,            "z" : 1,            "m" : 1        },        "name" : "normal_index",        "ns" : "jerome.jerome_2"    }]> db.jerome_2.dropIndex("normal_index"){ "nIndexesWas" : 7, "ok" : 1 }>  | 
| 
 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
 | 
> db.jerome.ensureIndex({m:1,n:1},{unique:true}){    "createdCollectionAutomatically" : true,    "numIndexesBefore" : 1,    "numIndexesAfter" : 2,    "ok" : 1}> db.jerome.insert({m:1,n:2})WriteResult({ "nInserted" : 1 })> db.jerome.insert({m:1,n:2})WriteResult({    "nInserted" : 0,    "writeError" : {        "code" : 11000,        "errmsg" : "insertDocument :: caused by :: 11000 E11000 duplicate key error index: jerome.jerome.$m_1_n_1  dup key: { : 1.0, : 2.0 }"    }})>  | 
| 
 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
 | 
> db.jerome.insert({"m":1})WriteResult({ "nInserted" : 1 })> db.jerome.insert({"n":1})WriteResult({ "nInserted" : 1 })> db.jerome.find({m:{$exists:true}}) #exists查找数据集合中一个字段存在或者不存在的记录{ "_id" : ObjectId("55729ec1aba41684d6e8826a"), "m" : 1 }{ "_id" : ObjectId("55729d5caba41684d6e88268"), "m" : 1, "n" : 2 }> db.jerome.ensureIndex({m:1},{sparse:true}) #创建稀疏索引{    "createdCollectionAutomatically" : false,    "numIndexesBefore" : 2,    "numIndexesAfter" : 3,    "ok" : 1}> db.jerome.find({m:{$exists:false}}) #MongoDB内部问题,所以找得到,通过下面强制指定索引{ "_id" : ObjectId("55729ec7aba41684d6e8826b"), "n" : 1 }> db.jerome.find({m:{$exists:false}}).hint("m_1") #下面这条记录,不存在m字段,所以不会创建索引,所以查不到记录 >  | 
mongoDB常见的查询索引(三)的更多相关文章
- MongoDB 常见的查询索引
		
常见的查询索引 _id索引 _id 索引是绝大多数集合默认建立的索引.对于每一个插入的数据.MongoDB 会自己主动生成一条唯一的 _id 字段. 1 2 3 4 5 6 7 8 9 ...
 - Mongodb 常见的查询语句及与 mysql 对比
		
db.users.find()select * from users db.users.find({"age" : 27})select * from users where ag ...
 - Mongodb 笔记03 查询、索引
		
查询 1. MongoDB使用find来进行查询.find的第一个参数决定了要返回哪些文档,这个参数是一个文档,用于指定查询条件.空的查询会匹配集合的全部内容.要是不指定查询,默认是{}. 2. 可以 ...
 - 【MongoDB详细使用教程】三、高级查询
		
目录 1.使用比较运算符查询 2.使用关键字查询 2.1.in/not in 关键字 2.2.size 关键字 2.3.exists 关键字 2.4.or 关键字 3.模糊查询 4.查询结果排序 5. ...
 - spring Mongodb查询索引报错 java.lang.NumberFormatException: empty String
		
最近事情比较多,本篇文章算是把遇到的问题杂糅到一起了. 背景:笔者最近在写一个mongo查询小程序,由于建立索引时字段名用大写,而查询的时候用小写. 代码如下: db.getCollection(&q ...
 - java mongodb 基础系列---查询,排序,limit,$in,$or,输出为list,创建索引,$ne 非操作
		
官方api教程:http://docs.mongodb.org/ecosystem/tutorial/getting-started-with-java-driver/#getting-started ...
 - 搜索引擎学习(三)Lucene查询索引
		
一.查询理论 创建查询:构建一个包含了文档域和语汇单元的文档查询对象.(例:fileName:lucene) 查询过程:根据查询对象的条件,在索引中找出相应的term,然后根据term找到对应的文档i ...
 - Mysql常见四种索引的使用
		
提到MySQL优化,索引优化是必不可少的.其中一种优化方式 --索引优化,添加合适的索引能够让项目的并发能力和抗压能力得到明显的提升. 我们知道项目性能的瓶颈主要是在"查(select)&q ...
 - 【mongoDB中级篇②】索引与expain
		
索引的操作 数据库百分之八十的工作基本上都是查询,而索引能帮我们更快的查询到想要的数据.但是其降低了数据的写入速度,所以要权衡常用的查询字段,不必在太多字段上建立索引. 在mongoDB中默认是用bt ...
 
随机推荐
- seaborn使用(样式管理)
			
seaborn使用(样式管理) Seaborn是一个在Python中制作具有吸引力和丰富信息的统计图形的库.它建立在matplotlib之上,并与PyData堆栈紧密集成,包括支持scipy和pand ...
 - python 常用镜像
			
pip镜像https://pypi.tuna.tsinghua.edu.cn/simplehttps://pypi.douban.io.com/simple pip install python-qt ...
 - Gradle 1.12用户指南翻译——第五十章. 依赖管理
			
本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见:http://blog.csdn.net/column/details/gradle-translation.html翻译项目请关注Github上 ...
 - Android服务——Service
			
服务 Service 是一个可以在后台执行长时间运行操作而不使用用户界面的应用组件.服务可由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行. 此外,组件可以绑定到服务,以与之进行 ...
 - Dynamics CRM2011  导入解决方案报根组件插入错误的解决方法
			
今天在还原一个老版本的解决方案,在导入时报根组件插入问题"Cannot add a Root Component 38974590-9322-e311-b365-00155d810a00 o ...
 - 前端CSS技术全解(二)
			
欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/52813761 本文出自:[余志强的博客] 一.CSS三大特性 1)继 ...
 - MongoDB实用教程
			
---------------------------------------------------------------------------------------------------- ...
 - 在android系统上写C语言程序--开机启动该程序不进入安卓系统
			
今天要写的这篇博文意义重大,也是网上很少有的,这是在我工作中学会的一项技术,当然,它也是由简单的问题组合而来的.如何在安卓中写C语言程序,调试安卓驱动,测试程序的的一项重要技能,下面我就不说废话了,直 ...
 - Android系统的安全设计与架构
			
Android系统的安全设计与架构 一.安全策略 1.Android 的总体架构由5个主要层次上的组件构成,这5层是:Android应用层. Android框架层.Dalvik虚拟机层.用户空间原生代 ...
 - 剑指offer-面试题7:俩个栈实现队列(java)
			
详细分析请参照C语言版,这里仅仅给出实现代码,注释很详细,不得不说java各种api用起来真是爽飞了 1 package com.xsf.SordForOffer; 2 3 import java.u ...