MongoDB查询、索引和聚合
2023-09-14 09:06:21 时间
初始化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})
參数 | 类型 | 描写叙述 |
---|---|---|
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 覆盖索引查询
- MongoDB:强大的子查询功能(mongodb子查询)
- MongoDB: 使用集合关联实现全面数据模型(mongodb集合关联)
- 精准查找:MongoDB字符串查询法(mongodb字符串查询)
- MongoDB语法指南:玩转NoSQL查询(mongodb语法)
- MongoDB日期查询实践指南(mongodb查询日期)
- 展开MongoDB的正则查询之旅(mongodb正则查询)
- 实践Mongodb监控:实施指标的极致实践(mongodb监控指标)
- 32位MongoDB:无障碍访问新的数据库世界(32位mongodb)
- MongoDB在应用开发中的用武之地(mongodb应用设计)
- 查询MongoDB排序查询:最佳实践(mongodb排序)
- MongoDB:识别类型最佳实践(mongodb判断类型)
- MongoDB导出SQL: 一种简单快捷的方式(mongodb导出sql)
- MongoDB:立即开始下载体验(mongodb下载)
- 索引MongoDB指定列索引构建技术(mongodb指定列)
- MongoDB时间比较:实现时间差计算和查询排序(mongodb比较时间)
- 查询MongoDB:发现数据之基本步骤与实例(mongodb数据条数)
- 达式掌握MongoDB查询表达式:立即开启你的NoSQL之旅(mongodb查询表)
- MongoDB实现关联表的方法(mongodb关联表)
- 查询解决MongoDB多表关联查询的最佳实践(mongodb多表关联)
- MongoDB:超越查询的功能(mongodb大于查询)
- 阿里云Mongodb是否价格过高?(阿里云mongodb贵么)
- MongoDB数据安全:保护隐私加密数据(mongodb数据加密)
- Mongodb如何查询文档(mongodb 查询文档)
- 如何使用MongoDB查询字段是否存在?(mongodb字段存在)
- MongoDB区间查询技术实践(mongodb 区间查询)