MongoDB条件操作符

  • $gt  > 大于
  • $lt   < 小于
  • $gte >= 大于等于
  • $lte  <= 小于等于
  • $ne  !=  不等于

条件操作符可用于查询语句中,帮助刷选查询结果。

用法:{field:{条件操作符 :  value}} 表示该字段的值符合条件操作符所表示的关系

示例:db.cols.find("age":{$gt: 20})

表示在当前数据库的cols集合中查找出age>20的文档。

条件操作符不仅能对数字进行比较,对字符串也能进行比较。

表示大于且小于

示例:db.cols.find("age":{$lt:25, $gt:22})

注:大于小于在一个{}内。

MongoDB类型操作符

$type:类型操作符,用于筛选出某个字段的值为某个类型的文档。

用法:{$type : value}

每个类型对应一个value,参见下表:

类型 value 备注
Double 1  
String 2  
Object 3  
Array 4  
Binary data 5  
Undefined 6 已废弃。
Object id 7  
Boolean 8  
Date 9  
Null 10  
Regular Expression 11  
JavaScript 13  
Symbol 14  
JavaScript (with scope) 15  
32-bit integer 16  
Timestamp 17  
64-bit integer 18  
Min key 255 Query with -1.
Max key 127  

示例:db.cols.find("filed_name":{$type : 2})

表示在当前数据库的cols集合中查找出符合"filed_name"这个字段值为String的文档。

MongoDB的limit()和skip()方法

limit()方法可以限制查询的文档数,如果结果大于限制的数量,那么只显示出限制容量大小的文档组。

用法:db.cols.find().limit(LIMIT_NUM)

注:不填LIMIT_NUM时默认显示一条

skip()方法可以跳过一定数量的文档之后进行查找。

用法:db.cols.find().skip(SKIP_NUM)

注:不填SKIP_NUM时出错。

limit()和skip()可以混合使用,但db.cols.find().limt(3).skip(1)和db.cols.find().skip(1).limit(3)意义相同,都表示跳过一个记录,限制查找到的之后三条。

还有一点需要注意的是当重复使用limt()时,结果也会被多次筛选。如:db.cols.find().limit(3).limit(1)最后只显示一条文档。

MongoDB的sort()排序

用法:db.cols.find().sort({field:1或-1}) 1表示升序,-1表示降序,filed表示所要根据排序的字段。如果某文档没有该字段,那么会被默认成最小值,排在之前。

MongoDB索引

MongoDB中的索引和关系型数据库下的索引概念基本一致,都是为了能够在大量的数据下快速的查找出所需的数据。

创建索引:

用法:db.cols.ensureIndex({field1:1|-1,field2:1|-1...})

表示根据字段field1,(field2等...)创建索引,其中的1和-1表示升序或者降序。当只有一个字段时,所创建的就单个索引(单个索引的升序、降序效果相同)。当有多个字段时,创建的索引即是复合索引。

ensureIndex()还可接受一些可选参数,用于设置索引的属性。

用法:db.cols.ensureIndex({filed1:1|1,field2:1|1},{可选参数1:value, 可选参数2:value...})

可选参数列表如下:

Parameter Type Description
background Boolean 建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 "background" 可选参数。 "background" 默认值为false
unique Boolean 建立的索引是否唯一。指定为true创建唯一索引。默认值为false.
name string 索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称,如:field1_1_field2_1
dropDups Boolean 建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。默认值为 false.
sparse Boolean 对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false.
expireAfterSeconds integer 指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。
v index version 索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。
weights document 索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。
default_language string 对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语
language_override string 对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 language.

索引创建完成后,可以通过db.cols.getIndexes()来查看cols集合下全部的索引。

或是用过db.system.index.find()来查看当前数据库下的全部索引。(自己验证时,发现没有打印出记录)

删除索引:可以通过db.cols.dropIndexes()来删除全部的索引,但是不包括默认的_id字段的索引。

重建索引:可以通过db.cols.reIndex()

MongoDB中的聚合

MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。

db.cols.aggregate([Array])

Array中可以填入多个表达式。

表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。

  • $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
  • $match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
  • $limit:用来限制MongoDB聚合管道返回的文档数。
  • $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
  • $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
  • $group:将集合中的文档分组,可用于统计结果
  • $sort:将输入文档排序后输出。
  • $geoNear:输出接近某一地理位置的有序文档。

示例:

> db.testdb.find()
{ "_id" : ObjectId("56aa0374f593495aa9328e3c"), "name" : "A", "age" : , "gender" : "f" }
{ "_id" : ObjectId("56aa0380f593495aa9328e3d"), "name" : "B", "age" : , "gender" : "f" }
{ "_id" : ObjectId("56aa03a4f593495aa9328e3e"), "name" : "C", "age" : , "gender" : "m" }
{ "_id" : ObjectId("56aa03bdf593495aa9328e3f"), "name" : "D", "age" : , "gender" : "f" }
{ "_id" : ObjectId("56aa03ccf593495aa9328e40"), "name" : "E", "age" : , "gender" : "m" }
{ "_id" : ObjectId("56aa03fcf593495aa9328e41"), "name" : "F", "age" : , "gender" : "f" }
{ "_id" : ObjectId("56aa040df593495aa9328e42"), "name" : "G", "age" : , "gender" : "m" }
>

对该集合进行聚合,来统计各个性别的人数,

> db.testdb.aggregate([{$group:{"_id":"$gender",count : {$sum : }}}])
{ "_id" : "m", "count" : }
{ "_id" : "f", "count" : }
>

如果想对文档在进行筛选,可以增加$match,

> db.testdb.aggregate([{$match:{"age":}},{$group:{"_id":"$gender",count : {$sum : }}}])

{ "_id" : "m", "count" :  }
{ "_id" : "f", "count" : }

对年龄为24的文档进行按性别统计。

下表展示了一些聚合的表达式:

表达式 描述 实例
$sum 计算总和。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])
$avg 计算平均值 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])
$min 获取集合中所有文档对应值得最小值。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])
$max 获取集合中所有文档对应值得最大值。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])
$push 在结果文档中插入值到一个数组中。 db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])
$addToSet 在结果文档中插入值到一个数组中,但不创建副本。 db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])
$first 根据资源文档的排序获取第一个文档数据。 db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])
$last 根据资源文档的排序获取最后一个文档数据 db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])

参考:MongoDB教程

MongoDB学习(三)的更多相关文章

  1. mongodb学习(三) 安装和基本CRUD

    菜鸟啊...先吐槽一下自己 发现mongodb已经升级到2.6标准版了.  服务端最新安装方法: http://www.cnblogs.com/lzrabbit/p/3682510.html 一 准备 ...

  2. MongoDB 学习三

    这章我们学习MongoDB的查询操作. Introduction to find find方法用于执行MongoDB的查询操作.它返回collecion中的documents子集,没有添加参数的话它将 ...

  3. MongoDb学习三(spring-data-mongodb)

    本文采用2个种配置方式.xml配置 代码配置方式进行数据库的连接.实现简单的增删该查等一些操作.代码都有注释官方文档如下https://docs.spring.io/spring-data/mongo ...

  4. MongoDB学习笔记(三)--权限 && 导出导入备份恢复 && fsync和锁

    权限                                                                                             绑定内网I ...

  5. Mongodb学习笔记一(Mongodb环境配置)

    Mongodb学习 说明: MongoDB由databases组成,database由collections组成,collection由documents组成,document由fileds组成.Mo ...

  6. MongoDB学习记录

    一.操作符 "$lt" :"<""$lte" :"<=""$gt" :"> ...

  7. MongoDB学习(四)客户端工具备份数据库

    在上一篇MongoDB学习(三)中讲解了如何在服务器端进行数据的导入导出与备份恢复,本篇介绍下如何利用客户端工具来进行远程服务器的数据备份到本地. 以客户端工具MongoVUE为例来进行讲解: 1.首 ...

  8. MongoDB学习之--安全和认证

    MongoDB学习之--安全和认证 本文主要介绍两部分内容,Mongodb的安全检查配置以及安全认证操作: 虽然确保系统安全是系统管理员的重要工作,但是作为程序员了解其机制也是大有好处的,毕竟不是每个 ...

  9. MongoDB 学习笔记(原创)

    MongoDB 学习笔记 mongodb 数据库 nosql 一.数据库的基本概念及操作 SQL术语/概念 MongoDB术语/概念 解释/说明 database database 数据库 table ...

随机推荐

  1. psutil运维必会模块

    目录 psutil介绍 安装psutil 获取CPU信息 获取内存信息 获取磁盘信息 获取网络信息 获取进程信息 psutil介绍 用Python来编写脚本简化日常的运维工作是Python的一个重要用 ...

  2. 如何在Vue中优雅的使用防抖节流

    1. 什么是防抖节流 防抖:防止重复点击触发事件 首先啥是抖? 抖就是一哆嗦!原本点一下,现在点了3下!不知道老铁脑子是不是很有画面感!哈哈哈哈哈哈 典型应用就是防止用户多次重复点击请求数据. 代码实 ...

  3. PAT 链表倒序的算法优化

    之前的答案错误问题已经解决了,现在还有运行超时的问题,先贴上之前的代码 1 #include <iostream> 2 #include <string.h> 3 using ...

  4. NullPointerException的处理新方式,Java14真的太香了

    在Java语言中,处理空指针往往是一件很头疼的事情,一不小心,说不定就搞出个线上Bug,让你的绩效考核拿到3.25.最近新出的Java14,相信大家都有所耳闻,那么今天就来看看,面对NullPoint ...

  5. c++用递归法将一个整数n转换成字符串

    任务描述 用递归法将一个整数n转换成字符串.例如,输入483,应输出字符串“483”.n的位数不确定,可以是任意位数的整数. 测试输入: 预期输出: 程序源码: #include <stdio. ...

  6. 24 接口 Interface

    /** Java语言的继承是单一继承,一个子类只能有一个父类(一个儿子只能有一个亲爹)* Java语言给我们提供了一种机制,用于处理继承单一的局限性的,接口* 接口:接口是一个比抽象类还抽象的类,接口 ...

  7. "文字链接"组件:<h-link> —— 快应用组件库H-UI

     <import name="h-link" src="../Common/ui/h-ui/basic/c_link"></import&g ...

  8. 对称加密算法在C#中的踩坑日常

    前言 有幸接触了一下传说中的对称加密算法3DES 感觉这些加密算法与我的工作是想去甚远的,一般没什么机会接触这些东西 今次了解了一下3DES这个对称算法 原理算不上明白,算是踩了C#中的一些坑吧 C# ...

  9. mysql的事务四个特性以及事务的四个隔离级别

    一.事务四大属性 分别是原子性.一致性.隔离性.持久性. 1.原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库, ...

  10. 「日常开发」记一次因使用Date引起的线上BUG处理

    生活中,我们需要掌控自己的时间,减少加班,提高效率:日常开发中,我们需要操作时间API,保证效率.安全.稳定.现在都2020年了,了解如何在JDK8及以后的版本中更好地操控时间就很有必要,尤其是一次线 ...