高级查询与索引

> sudo service mongodb start

 > mongo

 > exit #退出mongodb

  覆盖索引查询

 所有的查尊字段都是索引的一部分,所有的查询返回字段在同一个索引中。由于索引存在RAM中,因为索引获取数据要比扫描文档快。

 > db.users.ensureIndex({gender:1,user_name:1})

 > db.users.find({gender:"M"},{user_name:1,_id:0})  #这次查询,Mongodb不会在数据库文件中查找,而会从索引中提取数据。因为所以中不包含字段_id,所以_id在查询中会默认返回,可以在查询结果中将其排除。

  高级索引

 索引数组字段。在数组中创建索引,需要对数组中的每个字段一次建立索引。

 > db.user.insert({"adress":{"city":"zhuhai","province":"guangdong","pincode":"123"},"tags":["music","cricket","blogs"],"name":"clound"})

 > db.user.ensureIndex({"tags":1})    #会为music,cricket,blogs三个值建立单独的索引

 > db.user.find({tags:"cricket"})

 > db.user.find({tag:"cricket"}).explain()  #验证索引是否被使用 若执行结果中显示"cursor":"BtreeCursor tags_1"则表示已经使用了索引

 > db.user.ensureIndex({"address.city":1,"address.provice":1,"address.pincode":1})

 > db.user.find({"address.city":"chengdu"})

 > db.user.find({"address.city":"chengdu","address.province":"sichuan"})  #查询表达式必须遵循指定的索引的顺序

  原子操作

 原子操作就是要么执行成功,要么执行失败。

 $set 用来指定一个键并更新键值,若键不存在并创建

 $unset  用来删除一个键

 $inc 对文档的某个值为数字型的键进行增减

 $push 把value追加到field里面去,field一定要是数组类型才行,若field不存在,会把一个数组类型加进去

 $pushAll  一次追加多个值到一个数组字段内

 $pull  从数组field内删除一个等于value的值

 $addToSet  增加一个值到数组内,而且只有这个值不在数组内才增加

 $pop 删除数组的一个或最后一个元素

 $rename  修改字段名称

 $bit  位操作,integer类型  

  查询分析

 explain操作提供了查询信息,使用索引及查询统计等。indexOnly若为true,表示我们使用了索引;cursor因为使用了索引,MongoDB中索引存储在B树结构中,若没有使用索引,有表的类型是BasicCursor。这个键还会给出使用的索引的名称,可以通过这个名称查询当前数据库下的system.indexes集合来得到索引的详细信息;n当前查询返回的文档数量;nscanned/nscannedObjects表明当前只一次查询一共扫描了集合中多少个文档;millis当前查询所需时间,毫秒数;indexBounds当前查询具体使用的索引

 hint():可以使用hints强迫Mongodb使用一个指定的索引,通过这种方法在某些情形下会提升性能。

时间: 2024-10-15 22:06:03

高级查询与索引的相关文章

mongoDB高级查询与索引

整理来自 https://www.shiyanlou.com/courses/running/78 覆盖索引查询 所有的查询字段都是索引的一部分:所有的查询返回字段在同一个索引中. 由于索引存在于RAM中,因而从索引中获取数据要比扫面文档更快 范例:创建如下users集合(使用前面所学的方法创建该集合): { "contact": "987654321", "dob": "01-01-1991", "gender&q

测试使用索引库crud和高级查询分页

1.搭建ES的服务 导入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> 配置ES ... spring: application: name: hrm-es-service data: elasticsearc

SQL Server T-SQL高级查询(转)

高级查询在数据库中用得是最频繁的,也是应用最广泛的.   ? 基本常用查询   --select select * from student; --all 查询所有 select all sex from student; --distinct 过滤重复 select distinct sex from student; --count 统计 select count(*) from student; select count(sex) from student; select count(di

Jeecg高级查询器

一.背景       对于用户来讲查询功能按易用性分三个层次: 1. 最简单查询操作是一个输入框,全文检索,如百度,后台实现技术使用搜索引擎,需要设计和建立索引,技术较为复杂,适用于文档和信息数据库检索,但是结果很难精确控制. 2. 其次是定义字段查询,很多企业信息系统大多用的是这种查询,针对模块特定字段的查询有针对性.使用门坎低,适用于企业内部信息管理系统模块定制. 3. 最后一种是专门针对数据模型灵活的查询编辑器,使用难度最高,但是查询结果可以灵活和精确的控制,适用于有一定IT知识并对数据相

Sql Server数据库设计高级查询

-------------------------------------第一章  数据库的设计------------------------------------- 软件开发周期:     (1)需求分析     (2)概要设计     (3)详细设计     (4)编码     (5)集成测试     (6)上线运行     (7)后期维护 1,数据库设计步骤:     (1)收集信息     (2)标识对象(确定数据库中有哪些表)     (3)标识对象的属性(确定每个表中的例)  

[Hibernate Search] (5) 高级查询 - 过滤,投影和分面

高级查询 在介绍了更多的高级映射功能之后,是时候回顾一下之前介绍过的查询功能了,看看如何借助这些高级的映射功能来使用一些高级的查询功能.本文会通过以下几个方面进行介绍: 如何在不和数据库进行任何交互的前提下,借助Lucene的力量来动态的筛选结果 如何通过使用基于投影(Projection)的查询来获取需要的属性,从而避免与数据库的交互 如何使用分面搜索(Faceted Search)对搜索结果进行划分 如何使用查询时提升(Boosting) 如何给查询设置时间限制 过滤(Filtering)

第二部分 应用篇 第五章 MongoDB高级查询

声明:该文章主要来自<MongoDB实战>一书内容,主要想通过该书学习MongoDB的相应知识,加深理解,故写在自己的博文当中,作为记录,在最后的章节中,会有一个自己集合MongoDB数据库应用的JavaEE的web应用. 本章将结合实际应用,重点阐述一些实际工作中最常用的方法. 面向文档的NoSQL数据库主要解决的问题不是高性能的并发读写,而是保证海量数据存储的同时,具有良好的查询性能. MongoDB最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似

MySQL简单快速入门 (三)高级查询——JEPLUS软件快速开发平台

03.SQL高级查询_分组: 1).需求:一条查询,查询出每种商品的最高价格 2).分组的命令:group by 分组字段 3).实现上例: select category_id,max(price)  from product group by category_id; 查询顺序:先分组,再聚合 4).注意事项: 分组查询的结果最多只能包含:分组列,聚合结果,不能包含其他字段. 5).练习1: 需求:查询每个生产日期的商品的数量是多少? select  proDate,count(*)  fr

MongoDB高级查询用法

译 MongoDB高级查询用法 2018年09月04日 18:52:43 小小小辉happy 阅读数 752更多 分类专栏: 数据库 db的帮助文档 输入:db.help(); db.AddUser(username,password[, readOnly=false])  添加用户 db.auth(usrename,password)     设置数据库连接验证 db.cloneDataBase(fromhost)     从目标服务器克隆一个数据库 db.commandHelp(name)