数据库(27)mongodb(下)

2018-09-30  本文已影响0人  錦魚

limit和skip

limit()
  • 用于读取指定数量的文档

db.wzry.find().limit(2)

skip()
  • 用于跳过指定数量的文档

db.wzry.find().skip(2)

自定义查询

<\!-- 查询年龄大于5的人物 -->
db.wzry.find({
$where:function(){
return this.age>5;
}
})


投影:

在查询到的返回结果中, 只选择必要的字段
  • 语法
  * db.集合名称.find({},{字段名称:1,...})
  * 参数为字段与值, 值为1表示显示, 值为0不显
  * 特殊: 对于_id列默认是显示的, 如果不显示需要明确设置为0
例子:

db.wzry.find({},{_id:0,name:1,gender:1})

排序:

  • ⽅法sort(), ⽤于对结果集进⾏排序
  • db.集合名称.find().sort({字段:1,...})
  • 参数1为升序排列
  • 参数-1为降序排列
-- 按照age升序排序
db.wzry.find().sort({age:1})

统计个数

  • 方法:count() ⽤于统计结果集中⽂档条数
    • db.集合名称.find({条件}).count()
    • db.集合名称.count({条件})
  • 举例

-- 统计年龄大于等于5的人物

 db.wzry.find({age:{\$gte:5}}).count()
 db.wzry.count({age:{\$gte:5}})

消除重复

  • 方法:distinct() 对数据进行去重

    • db.集合名称.distinct('去重字段',{条件})
  • 举例

    -- 查看所有职业种类
    db.wzry.distinct('type')
    

mongodb聚合和管道

聚合
  • 聚合(aggregate)是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage)组成的管道,可以对每个阶段的管道进行分组、过滤等功能,然后经过一系列的处理,输出相应的结果。
db.集合名称.aggregate({管道:{表达式}})



常用管道

  • 在mongodb中,⽂档处理完毕 后, 通过管道进⾏下⼀次处理
常用管道如下:
  • $group 将集合中的⽂档分组, 可⽤于统计结果
  • $match过滤数据, 只输出符合条件的⽂档
  • $project修改输⼊⽂档的结构, 如重命名、 增加、 删除字段、 创建计算结果
  • $sort将输⼊⽂档排序后输出
  • $limit限制聚合管道返回的⽂档数(一页存放的数量)
  • $skip跳过指定数量的⽂档, 并返回余下的⽂档(页数)
  • $unwind将数组类型的字段进⾏拆分

表达式

  • 处理输⼊⽂档并输出
  • 语法:表达式:'$列名'
常用表达式:
  • $sum计算总和, $sum:1 表示以⼀倍计数
  • $avg计算平均值
  • $min获取最⼩值
  • $max获取最⼤值
  • $push在结果⽂档中插⼊值到⼀个数组中
  • $first根据资源⽂档的排序获取第⼀个⽂档数据
  • $last根据资源⽂档的排序获取最后⼀个⽂档数据

group

$group
  • 将集合中的文档分组,可用于统计结果
  • _id表示分组的依据,使用某个字段的格式为'$字段'
  • 例1: 统计男生、女生的总人数
db.stu.aggregate(
    {
        $group:{
            _id:'$gender',
            counter:{$sum:1}
        }
    }
)
Group by null
  • 将集合中所有文档分为一组
  • 例2:求学生总人数、平均年龄
db.stu.aggregate(
    {
        $group:
        {
            _id:null,
            counter:{$sum:1},
            avgAge:($avg:'$age')
        }
    }
)

透视数据


上一篇下一篇

猜你喜欢

热点阅读