区块链技术博客
www.b2bchain.cn

Python—MongoDB进阶

这篇文章主要介绍了Python—MongoDB进阶的讲解,通过具体代码实例进行17616 讲解,并且分析了Python—MongoDB进阶的详细步骤与相关技巧,需要的朋友可以参考下https://www.b2bchain.cn/?p=17616

本文实例讲述了2、树莓派设置连接WiFi,开启VNC等等的讲解。分享给大家供大家参考文章查询地址https://www.b2bchain.cn/7039.html。具体如下:

MongoDB进阶

  • MongoDB的进阶用法
    • 一,limit
    • 二,skip
    • 三,同时使用limit和skip
    • 四,投影
    • 五,排序
    • 六,统计个数
    • 七,消除重复
  • 聚合操作
    • 一,MongoDB的聚合是什么
    • 二,常用管道
    • 三,$match的使用
    • 四,$group的使用
      • 1,按照某个字段进行分组
      • 2,常用的表达式
      • 3,group by null
      • 4,数据透视
      • 6,多次聚合
    • 五,$project
      • 1,使用
    • 六,管道命令之$sort
    • 七,$skip 和 $limit

MongoDB的进阶用法

一,limit

  • limit() : 用于读取指定数量的文档
    用法:
    db.集合名称.find().limit(number)
    例如:
    查询find查询到的数据的前两条
    db.集合名称.find().limit(2)

二,skip

  • skip() : 用于跳过指定数量的文档
    用法:
    db.集合名称.find().skip(number)
    例如:
    跳过find查到的数据的前两个,从第3个开始查询:
    db.集合名称.find().skip(2)

三,同时使用limit和skip

  • db.集合名称.find().skip(5).limit(4)
    这个的意思是跳过find()查询到的数据的前5条,从第6条开始查询,查询4条

四,投影

  • 在查询到的返回结果中,只选择必要的字段
    命令:
    db.集合名称.find({},{field : 1,…})
    这里说明一下 :
  • 参数为字段和值,值为1的时候表示显示该字段,为0的时候则不显示
  • 特别要注意 :对于_id 列默认是显示的,如果不显示需要明确设置为0
    例如:
    db.集合名称.find({},{_id : 0, 字段名 : 1, 字段名 :1})

五,排序

  • 方法 sort() ,用于对结果集进行排序
    db.集合名称.find().sort({字段: 1,…})
    说明:
  • 参数 1为升序排序,参数 -1 为降序排序+
    例如:
    根据gender降序,在根据age升序
    db.集合名称.find().sort({gender : -1 ,age : 1})

六,统计个数

  • 方法count()用于统计结果集中文档条数
    db.集合名称.find().count()
    例如:
    统计gender为true的有几个
    db.集合名称.find({gender : true}),count()

七,消除重复

  • 方法 distinct() 对数据进行去重
    db.集合名称.distinct(“去重的字段”, {条件})
    例如:
    查询所有不重复的hometown
    db.集合名称.distinct(“hometown”, {})

聚合操作

一,MongoDB的聚合是什么

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

二,常用管道

在MongoDB中,⽂档处理完毕后, 通过管道进⾏下⼀次处理 常用管道命令如下:

  • $match : 过滤数据,只输出符合条件的文档
  • $group : 将集合中的文档分组,可用于统计结果
  • $project : 修改输入文档的结构,如重命名,增加,删除字段,
  • $sort : 将输入文档排序后输出
  • $limit : 限制聚合管道返回的文档数
  • $skip : 跳过指定数量的文档,并返回余下的文档

三,$match的使用

$match用于进行数据的过滤,是在能够在聚合操作中使用的命令,和find区别在于$match 操作可以把结果交给下一个管道处理,而find不行
示例:

  • 1,查询age为18的数据
    db.集合名称.aggregate({$match : {age:18} })

  • 2,查询age大于20的数据
    db.集合名称.aggregate({$match : {age : {"$gt" : 20} } })

四,$group的使用

1,按照某个字段进行分组

$group 是所有聚合命令中用的最多的一个命令,用来将集合中的文档分组,可用于统计结果
使用的格式:

{   $group:     {       _id: <expression>, // Group By Expression       <field1>: { <accumulator1> : <expression1> },       ...     }  } 

说明:

  • _id为必选字段,为被分组字段,可为空或null

  • accumulator为可选字段,其中可携带运算符使用:

2,常用的表达式

  • $sum : 计算总和,$sum:1表示以1倍计数
  • $avg : 计算平均值
  • $min : 获取最小值
  • $max: 获取最大值
  • $push : 在结果文档中插入值到一个数组中

示例:

db.集合名字.aggregate(     {$group:         {             _id:"$gender",             counter:{$sum:1}         }     } ) 

这里要注意:

  • db.db_name.aggregate是语法,所有的管道命令都需要写在其中
  • _id 表示分组的依据,按照哪个字段进行分组,需要使用$gender表示选择这个字段进行分组
  • $sum:1 表示把每条数据作为1进行统计,统计的是该分组下面数据的条数

3,group by null

当我们需要统计整个文档的时候,$group 的另一种用途就是把整个文档分为一组进行统计
示例:

db.集合名字.aggregate(     {$group:         {             _id:null,             counter:{$sum:1}         }     } ) 

这里注意:

  • _id:null 表示不指定分组的字段,即统计整个文档,此时获取的counter表示整个文档的个数

4,数据透视

正常情况在统计的不同性别的时候,需要知道所有的name,需要逐条观察,如果通过某种方式把所有的name放到一起,那么此时就可以理解为数据透视
示例 :

 db.集合名字.aggregate(      {$group:          {              _id:null,              name:{$push:"$name"}          }      }  ) 
  • 使用 $$ROOT 可以将整个文档放入数组中
 db.集合名字.aggregate(      {$group:          {              _id:null,              name:{$push:"$$ROOT"}          }      }  ) 

6,多次聚合

对于如下数据,需要统计出每个country/province下的userid的数量(同一个userid只统计一次)

# 插入数据 db.集合名字.insert([{ "country" : "china", "province" : "sh", "userid" : "a" }, {  "country" : "china", "province" : "sh", "userid" : "b" }, {  "country" : "china", "province" : "sh", "userid" : "a" },  {  "country" : "china", "province" : "sh", "userid" : "c" },  {  "country" : "china", "province" : "bj", "userid" : "da" },   {  "country" : "china", "province" : "bj", "userid" : "fa" }]) 
db.stu2.aggregate( {$group:{_id:{country:"$country", province:"$province", userid:"$userid"}}}, {$group:{_id:null, counter:{$sum:1}}} ) 

Python—MongoDB进阶

五,$project

1,使用

$project用于修改文档的输入输出结构,例如重命名,增加,删除字段
示例:

# 插入数据 db.集合名字.insert([{ "country" : "china", "province" : "sh", "userid" : "a" }, {  "country" : "china", "province" : "sh", "userid" : "b" }, {  "country" : "china", "province" : "sh", "userid" : "a" },  {  "country" : "china", "province" : "sh", "userid" : "c" },  {  "country" : "china", "province" : "bj", "userid" : "da" },   {  "country" : "china", "province" : "bj", "userid" : "fa" }]) 
db.集合名字.aggregate(   {$group:{_id:{"国家":'$country', "省份":'$province',userid:'$userid'}}},   {$group:{_id:{"国家":'$_id.国家', "省份":'$_id.省份'},counter:{$sum:1}}},   {$project:{_id:0, "国家":'$_id.国家', "省份":'$_id.省份', "数量":'$counter'}} ) 

Python—MongoDB进阶

六,管道命令之$sort

$sort用于将输入的文档排序后输出

使用示例如下:

  • 1,查询学生信息,按照年龄升序
 db.stu.aggregate({$sort:{age:1}}) 
  • 2,查询男女人数,按照人数降序
 db.stu.aggregate(      {$group:{_id:"$gender", counter:{$sum:1}}},      {$sort:{counter:-1}}  ) 

Python—MongoDB进阶

七,$skip 和 $limit

  • $limit 限制返回数据的条数
  • $skip 跳过指定的文档数,并返回剩下的文档数
  • 同时使用时先使用skip在使用limit

使用示例如下:

  • 1.查询2条学生信息
 db.stu.aggregate(      {$limit:2}  ) 
  • 2.查询从第3条开始的学生信息
 db.stu.aggregate(      {$skip:2}  ) 
  • 3.统计男女生人数,按照人数升序,返回第二条数据
 db.stu.aggregate(      {$group:{_id:"$gender",counter:{$sum:1}}},      {$sort:{counter:-1}},      {$skip:1},      {$limit:1}  ) 

Python—MongoDB进阶

本文转自互联网,侵权联系删除Python—MongoDB进阶

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » Python—MongoDB进阶
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们