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 ...
随机推荐
- centos 6安装opencv
昨天装好的,今天有些细节已经记不起来里,大致写一下吧. 首先,从opencv官网下载linux的opencv-2.4.9安装包,下载地址:http://jaist.dl.sourceforge.net ...
- Linux shell查询ip归属地
起因 有的时候写脚本需要能够在脚本中获取到ip的归属地,比如分析登录日志列出攻击者的相关信息等. 可以使用whois来查询ip的详细信息,但是whois并不是每台机器预装的,而且我想看中文的结果,所以 ...
- Python3 MySQL 数据库连接
什么是 PyMySQL? PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb. PyMySQL 遵循 Python 数据库 AP ...
- Python教学相关资料
Python教学调查链接 一.专题 1.绘图 如何开始使用Python来画图 Python画图总结 2.科学计算与数据分析 3.可视化 4.网络爬虫 5. 做笔记 Python-Jupyter Not ...
- Bootstrap3 表格-条纹状表格
通过 .table-striped 类可以给 之内的每一行增加斑马条纹样式. 跨浏览器兼容性 条纹状表格是依赖 :nth-child CSS 选择器实现的,而这一功能不被 Internet Explo ...
- Bootstrap3 栅格系统-实例:多余的列(column)将另起一行排列
如果在一个 .row 内包含的列(column)大于12个,包含多余列(column)的元素将作为一个整体单元被另起一行排列. <div class="row"> &l ...
- tomcat内存溢出解决,java.lang.OutOfMemoryError: PermGen space
今天遇到了一个java.lang.OutOfMemoryError: PermGen space异常问题,一直解决不了,根据网上修改了tomcat的配置文件,但是还是解决不了,最后是通过如下方式解决的 ...
- SpringMVC基础配置(通过注解配置,非xml配置)
SpringMVC是什么,有多火,我这里就不再啰嗦了,SpringMVC比Struts2好用太多,我在学校的时候私下里两种都接触过,对比之后果断选择了SpringMVC,后来在做Android应用开发 ...
- eval和列表解析的一处陷阱
>>> def f(): a=1 return [i+a for i in range(3)] >>> f() [1, 2, 3] >>> def ...
- 20 ViewPager Demo4自动轮播
MainActivity.java 思想:才用非常大的数 让其看起来可以循环轮播图片并且用户可以从尽头滑到首图的特点 . package com.qf.day20_viewpager_demo4; i ...