您的位置:首页 > 其它

查询、索引和聚合

2015-08-11 14:43 369 查看
 > sudo service mongodb start

 > mongo

 > mongo --shutdown #关闭MongoDB服务

  查询语句条件

  1.> $gt < $lt >= $gte <=$lte

 > db.user.find({"age":{$gt:10,$lt:15}}) #在user中查询年龄大于10小于15的数据

  2.type的值:1双精度型 2字符串 3对象 4数组 5二进制数据 7对象ID 8布尔类型 9数据 10空 11正则表达式 13JS代码 14符号 15有作用域的JS代码 16:32位整数型 17时间戳 18:64位整数型 255Min key 127Max key

 > db.user.find({"sex":{$type:2}}) #查询存储的是字符串的性别的文档

  3.limit读取指定数量的数据记录

 > db.user.find().limit(4) #读取前四条记录

  4.skip读取时调过指定数量的数据记录

 > db.user.find().limit(4).skip(1) #显示跳过第一条后的四条数据

  5.sort 1表示升序 -1表示降序 db.collecitonName.find().sort({key:1|-1})

  索引

 索引能够极大的提高查询的效率,若没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。这种扫描全集合的查询效率是非常低的,特别是在处理大量的数据时,查询可能要花费几十秒甚至几分钟。索引是一种特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库集合中一个文档或多个文档的值进行排序的一种结构。同样,1代表升序,-1代表降序。

 ensureIndex()的可选参数:

  参数 类型 描述

 background Boolean 建立索引要不要阻塞其他数据库操作,默认为false  

 unique Boolean 建立的索引是否唯一,默认为false

 name string 索引的名称,若未指定,系统自动生成

 dropDups Boolean 建立唯一索引时,是否删除重复记录,默认false

 sparse Boolean 对文档不存在的字段数据不启用索引,默认为false

 expireAfterSeconds Boolean 设置集合的生存时间,单位为秒

 v index version 索引的版本号

 weights document 索引权重值,范围为1到999999

 default-language string 默认为英语

 language_override string 默认为language

 > db.user.ensureIndex({"name":1},{background:1})

  聚合 aggregate 语法 db.collectionName.aggregate({$match:{x:1},{limit:num},$group:{_id}:$age})

  可选参数 $match查询,跟find一样 $limit限制显示结果数量 $skip忽略结果数量 $sort排序 $group按照给定表达式组合结果

 聚会表达式 $sum 计算总和 $avg 计算平均值 $min、$max 计算最小值和最大值 $push 在结果文档中插入值到一个数组 $addToSet 在结果文档中插入值到一个数组,但不创建副本 $first 根据资源文档的排序获取第一个文档数据 $last 根据资源文档的排序获取最后一个文档数据

 $ db.user.aggregate([{$group:{_id:"$name",user:{$sum:"$user_id"}}}])

  管道

 MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理,管道操作是可以重复的。表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其他的文档。聚合框架中常用的几个操作:$project 修改输入文档的结构,可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档 $match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作 $limit用来限制MongoDB聚合管道返回的文档数 $skip在聚合管道中调过指定数量的文档,并返回余下的文档 $unwind在文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值 $group将结合中的文档分组,可用于统计结果 $sort将输入文档排序后输出 $geoNear输出接近某一地理位置的有序文档

 > db.user.aggregate([{$match:{user_id:{$gt:0,$lte:2}}},{$group:{_id:"user",count:{$sum:1}}}])
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: