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. React Native简史

    诞生 React Native 诞生于 2013 年的 Facebook 内部黑客马拉松(hackathon): In the essence of Facebook’s hacker culture ...

  2. 20175110 王礼博 exp4恶意代码分析

    目录 1.基础知识 2.系统运行监控 3.恶意软件分析 4.基础问题回答 5.实践总结与体会 1. 基础知识 1.1 恶意代码的概念与分类 定义:指故意编制或设置的.对网络或系统会产生威胁或潜在威胁的 ...

  3. CentOS7安装MYCAT中间件

    MYCAT是一个被广泛使用的功能强大的开源的数据库中间件,当然他的理想不仅仅是做一个中间件.这篇文章主要记录MYCAT服务的搭建过程,下篇会继续更新MYCAT的使用配置. 本篇记录将使用CentOS7 ...

  4. android29之UI控件的抽屉式实现方法之一(DrawerLayout和NavigationView)

    添加依赖 implementation 'com.google.android.material:material:1.2.0-alpha06' 在Layout中创建两个Xml布局文件,header. ...

  5. Daily Scrum 1/12/2016

    Zhaoyang & Yandong: Optimize the speech input interface Fuchen: Code refactor in the NLP module ...

  6. JAVA的synchronized写法

    使用关键字synchronized的写法比较多,常用的有如下几种,代码如下: public class MyService { synchronized public static void test ...

  7. 10.添加script标签,判断onload是否完成

    class Tools { static loadScript(url, callback) { let old_script = document.getElementById(url); if ( ...

  8. 基于Koa实现留言版demo

    学习node.koa,随手做了一个留言板demo. 基本功能如下: 未登录用户可以查看主题列表和主题内容. 用户注册和登录功能. 登录用户可以发表.修改.删除自己的主题. 登录用户主题列表下方有发表主 ...

  9. python os模块获取指定目录下的文件列表

    bath_path = r"I:\ner_results\ner_results" dir_list1 = os.listdir(bath_path) for dir1 in di ...

  10. 用long类型让我出了次生产事故,写代码还是要小心点

    昨天发现线上试跑期的一个程序挂了,平时都跑的好好的,查了下日志是因为昨天运营跑了一家美妆top级淘品牌店,会员量近千万,一下子就把128G的内存给爆了,当时并行跑了二个任务,没辙先速写一段代码限流,后 ...