MongoDB查询、索引和聚合
初始化mongodb数据库
- > use deng
- switched to db deng
- > db.createCollection("jingdong") #无參数
- {"ok":1}
- > show collections
- jingdong
- system.indexes
- > userdoc1=({"user_id":1,"name":"cloud","state":"active","actor":"user","e-mail":"test@qq.com","VM_num":2,"time":[{"date":"2014-08-12","hour":"10:53 PM"}] })
- > userdoc2=({"user_id":2,"name":"testadmin","state":"active","actor":"admin","e-mail":"test@qq.com","VM_num":2,"time":[{"date":"2014-08-11","hour":"06:34 AM"}] })
- > doc=({"name":"peter","position":"teacher"})
- > db.jingdong.insert(userdoc1)
- WriteResult({"nInserted":1})
- > db.jingdong.insert(userdoc2)
- WriteResult({"nInserted":1})
- > db.jingdong.insert(doc1)
- WriteResult({"nInserted":1})
查询语句
- db.jingdong.find() #相当于select * from jingdong;
条件操作符
- mongodb中的条件操作符有:
- (>) 大于 - \$gt #greate
- (<) 小于 - \$lt #low
- (>=) 大于等于 - \$gte #equal
- (<= ) 小于等于 - \$lte
样例:
- > db.jingdong.find({user_id:{$gt:1}})
- > db.jingdong.find({user_id:{$lte:2,$gt:1}})
- #type的值
- 双精度型-1
- 字符串-2
- 对象-3
- 数组-4
- 二进制数据-5
- 对象ID-7
- 布尔类型-8
- 数据-9
- 空-10
- 正則表達式-11
- JS代码-13
- 符号-14
- 有作用域的JS代码-15
- 32位整型数-16
- 时间戳-17
- 64位整型数-18
- Min key-255
- Max key-127
- db.jingdong.find({"name":{$type:2}}) #查找name是字符串的文档记录
limit和skip
- 读取指定数量的数据记录 limit
- db.shiyanlou.find().limit(1) #读取一条记录,默认是排在最前面的那一条被读取
- 读取时跳过指定数量的数据记录 skip
- db.shiyanlou.find().limit(1).skip(1)
MongoDB排序 -sort()
- 与sqlite中的排序一样有升序和降序,当中升序用1表示,降序用-1表示
- db.jingdong.find().sort({"time":1})
索引 - ensureIndex()
索引通常可以极大的提高查询的效率,假设没有索引,MongoDB在读取数据时必须扫描集合中的每一个文件并选取那些符合查询条件的记录。这样的扫描全集合的查询效率是很低的,特别在处理大量的数据时。查询可以要花费几十秒甚至几分钟。无疑对站点的性能是很致命的。
索引是特殊的数据结构。索引存储在一个易于遍历读取的数据集合中。索引是对数据库集合中一个文档或多个文档的值进行排序的一种结构。
- db.COLLECTION_NAME.ensureIndex({KEY:1|-1})
- > db.shiyanlou.ensureIndex({"name":1}) #1代表升序 -1代表降序
- > db.shiyanlou.ensureIndex({"user_id":1,"name":1},{background:1})
ensureIndex參数表格例如以下:
參数 | 类型 | 描写叙述 |
---|---|---|
background | Boolean | 建立索引要不要堵塞其它数据库操作,默觉得false |
unique | Boolean | 建立的索引是否唯一,默认false |
name | string | 索引的名称。若未指定。系统自己主动生成 |
dropDups | Boolean | 建立唯一索引时。是否删除反复记录。默认flase |
sparse | Boolean | 对文档不存在的字段数据不启用索引。默认false |
expireAfterSeconds | integer | 设置集合的生存时间,单位为秒 |
v | index version | 索引的版本 |
weights | document | 索引权重值,范围为1到99999 |
default-language | string | 默觉得英语 |
language_override | string | 默认值为 language |
聚合 -aggregate()
- db.COLLECTION_NAME.aggregate({
- $match:{x:1},
- {limit:NUM},
- $group:{_id:$age}
- })
- $match:查询。跟find一样;
- $limit:限制显示结果数量;
- $skip:忽略结果数量。
- $sort:排序;
- $group:依照给定表达式组合结果。
- > db.jingdong.aggregate([{$group:{_id:"$name", user:{$sum:"$user_id"}}}])
名称 | 描写叙述 |
---|---|
$sum | 计算总和 |
$avg | 计算平均值 |
\$min和$max | 计算最小和最大值 |
$push | 在结果文档中插入值到一个数组 |
$addToSet | 在结果文档中插入值到一个数组,但不创建副本 |
$first | 依据资源文档的排序获取第一个文档数据 |
$last | 依据资源文档的排序获取最后一个文档数据 |
管道
MongoDB的聚合管道将MongoDB文档在一个管道处理完成后将结果传递给下一个管道处理。
管道操作是能够反复的。
表达式:处理输入文档并输出。
表达式是无状态的。仅仅能用于计算当前聚合管道的文档,不能处理其他的文档。 聚合框架中经常使用的几个操作:
- $project:改动输入文档的结构。能够用来重命名、添加或删除域,也能够用于创建计算结果以及嵌套文档。
- $match:用于过滤数据,仅仅输出符合条件的文档。$match使用MongoDB的标准查询操作。
- $limit:用来限制MongoDB聚合管道返回的文档数。
- $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
- $unwind:将文档中的某一个数组类型字段拆分成多条,每条包括数组中的一个值。
- $group:将集合中的文档分组,可用于统计结果。
- $sort:将输入文档排序后输出。
- $geoNear:输出接近某一地理位置的有序文档。
- > db.shiyanlou.aggregate([{$match:{user_id:{$gt:0,$lte:2}}},{$group:{_id:"user",count:{$sum:1}}}])
- {"_id":"user","count":2}
MongoDB查询、索引和聚合的更多相关文章
- spring Mongodb查询索引报错 java.lang.NumberFormatException: empty String
最近事情比较多,本篇文章算是把遇到的问题杂糅到一起了. 背景:笔者最近在写一个mongo查询小程序,由于建立索引时字段名用大写,而查询的时候用小写. 代码如下: db.getCollection(&q ...
- 【mongoDB查询进阶】聚合管道(二) -- 阶段操作符
https://segmentfault.com/a/1190000010826809 什么是管道操作符(Aggregation Pipeline Operators) mongoDB有4类操作符用于 ...
- 【mongoDB查询进阶】聚合管道(一) -- 初识
https://segmentfault.com/a/1190000010618355 前言:一般查询可以通过find方法,但如果是比较复杂的查询或者数据统计的话,find可能就无能为力了,这时也许你 ...
- MongoDB查询mgov2的聚合方法
1.多条表数据累计相加. respCount := struct { Rebatescore int64 //变量命名必须要和查询的参数一样.}{} o := bson.M{"$match& ...
- 【mongoDB查询进阶】聚合管道(三)--表达式操作符
https://segmentfault.com/a/1190000010910985 管道操作符的分类 管道操作符可以分为三类: 阶段操作符(Stage Operators) 表达式操作符(Expr ...
- MongoDB 覆盖索引查询
MongoDB 覆盖索引查询 官方的MongoDB的文档中说明,覆盖查询是以下的查询: 所有的查询字段是索引的一部分 所有的查询返回字段在同一个索引中 由于所有出现在查询中的字段是索引的一部分, Mo ...
- mongoDB常见的查询索引(三)
1. _id索引 _id索引是绝大多数集合默认建立的索引 对于每个插入的数据,MongoDB会自动生成一条唯一的_id字段. 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
- MongoDB 常见的查询索引
常见的查询索引 _id索引 _id 索引是绝大多数集合默认建立的索引.对于每一个插入的数据.MongoDB 会自己主动生成一条唯一的 _id 字段. 1 2 3 4 5 6 7 8 9 ...
- MongoDB学习笔记(二、MongoDB查询)
目录: MongoDB数据类型 MongoDB新增语法 MongoDB查询语法 MongoDB查询选择器 MongoDB关联查询 MongoDB数据类型: MongoDB新增语法: 语法:db.col ...
- MongoDB的索引(三)
MongoDB的索引: 1. _id索引 该索引是大多数集合默认创建的索引,也就是说用户每插入一个数据,MongoDB会自动生成一条唯一的_id字段. 2. 单键索引 单键索引是最普通的索引,它不会自 ...
随机推荐
- Tensorflow 读写 tfrecord 文件(Python3)
TensorFlow笔记博客:https://blog.csdn.net/xierhacker/article/category/6511974 写入tfrecord文件 import tensorf ...
- Crontab入门基础
Crontab入门基础 crontab前言 crontab是Unix和Linux用于设置周期性被执行的指令,是互联网很常用的技术,很多任务都会设置在crontab循环执行,如果不使用crontab,那 ...
- js 数组 : 差集、并集、交集、去重
//input:[{name:'liujinyu'},{name:'noah'}] //output:['liujinyu','noah'] Array.prototype.choose = func ...
- UVALive 2664 One-way traffic
One-way traffic Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVALive. Or ...
- HDU 4312 Contest 2
题目要求两点间的最大值作为距离即: 即是切比雪夫距离.而切比雪夫距离与曼哈顿距离的转换却很巧妙. 把平面坐标所有点绕原点逆向旋转45度后,所得点的曼哈顿距离之和除以√2,即是切雪比夫距离.旋转点的公式 ...
- Git-删除本地文件夹的repository(本地仓库)
安装git软件后.有些文件夹里会出现带有?的图标,右键菜单上会有"Git-Sync"或者"Git-Commit"等命令:正常的应该是"Git-Clon ...
- poj_3468线段树成段更新求区间和
#include<iostream> #include<string.h> #include<cstdio> long long num[100010]; usin ...
- nyoj--8--一种排序(排序,水题)
一种排序 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复:还知道这个长方形的宽和长,编号.长.宽都是整数:现 ...
- VC 下加载 JPG / JPEG / GIF / PNG 图片最简单的方法
VC MFC 提供的 API LoadBitmap / LoadImage 类 CBitmap 等都只能操作 BMP 位图,图标.对于其他常用的 JPG / JPEG / GIF / PNG 格式,它 ...
- 上传文件时文件类型限制 <input id="File1" type="file" accept=""/>
在做项目项目中经常需要上传文件,类型也就那几种.虽然在js中加了上传文件类型的限制,但是为了减少因为用户选择不当而造成的反复检验.可以在input标签上加上accept属性.这种限制只是优化了选择文件 ...