• PYTHON2.day14


    一、聚合操作(续)
      
      1、聚合操作符

        【1】$match:数据筛选
        
        *$match值的写法同query参数

                   e.g.  筛选年龄大于等于二十的文档
                     db.class0.aggregate({$match:{age:{$gte:20}})

               match

           【2】$limit  显示集合中的前几条文档

                    e.g.  显示集合中前三条文档
                     db.class0.aggregate({$limit:3})

              limit

          【3】$skip  跳过前几条文档,显示后面的

            e.g.  跳过前三条文档
             db.class0.aggregate({$skip:3})

              skip

           【4】$sort  对集合文档排序

                    e.g.  将集合文档按年龄升序排序
                     db.class.aggregate({$sort:{age:1}})

            sort
         2、聚合管道
        
         定义:指将多个聚合操作合并到一起完成,即将上一个集合操作的结果作为下一个集合操作的对象,直 到所有聚合操作的完成
        
         形式:db.collection.aggregate([{},{},{}...])
           
              e.g.将文档按年龄排序,然后不显示_id
             db.class0.aggregate([{$sort:{age:1}},{$project:{_id:0}}])

            聚合管道
    练习:
       使用grade
       1、将所有男生按照年龄升序排序结果不显示_id
           
                  db.class0.aggregate([{$sort:{age:1}},{$match:{sex:'m'}},{$project:{_id:0}}])

       2、统计一下班级是否有重名同学

          db.class0.aggregate([{$group:{_id:'$name',num:{$sum:1}}},{$match:{num:{$gt:1}}}])

              练习1
    二. 固定集合

      定义:指的是mongodb中创建固定大小的集合,称之为固定集合

        特点:1. 能够淘汰早期数据
                 2. 可以控制集合大小
                 3. 数据插入,查找操作速度快
        
         使用:日志处理,临时缓存

        创建:
         db.createCollection(collection,{capped:true,size:10000,max:20})
          
             capped:true  表示固定集合
             size:10000  表示固定集合大小  字节
             max:20      表示最多存放所少个文档

                 固定集合
    三. 文件存储

      1.文件存储数据库方式
          
             【1】存储路径 :将本地文件所在路径以字符串存储到数据库
        
                 优点:节省数据库空间
                     缺点:当数据库或者文件发生变动必须要修改数据库内容
            
             【2】存储文件本身:将文件转换为二进制存储到数据库

                优点:文件在数据库中,不容易丢失
                     缺点:占用数据库空间较多,文件存取效率不高

      2. GridFS文件存储方案
          
             目的:更好的存取MongoDB中的大文件(>16M)

        GridFS说明:
               1. 在mongodb数据库中创建两个集合共同存储文件
                 2. fs.files集合用于存储文件信息,为每个文件建议一个信息文档
                 3. fs.chunks集合中建立与fs.files集合对应文件文档的关连,将文件分块以二进制格式存储。

        存取方法
               1. 存储:  mongofiles -d  dbname put  file

                 e.g. 将本地test.mp4文件存储到grid数据库
                          mongofiles -d grid put test.mp4

                2. 提取: mongofiles -d  dbname get  file

                  e.g. 从grid数据库获取test.mp4文件
                              mongofiles -d grid get test.mp4

        
             优缺点
               优点:存储方便,提供了较好的存取命令
                 缺点:读写效率较低,不建议存储小文件
                 文件存储     

    四. mongo shell对JavaScript支持

      * mongo shell 界面中支持基本的JS程序
         * 通过js也可以处理数据库中简单的逻辑问题

              shell0
    五. Python 操作MongoDB

      1. 第三方模块 : pymongo
            安装方法: sudo  pip3  install  pymongo

          2019-03-04_11-57-41

      2. 操作步骤
           【1】 创建mongodb数据库连接对象
                    
                     conn = pymongo.MongoClient('localhost',27017)
            
             【2】 生成操作的数据库对象

                    db = conn.stu
                     db = conn['stu']
            
             【3】 生成集合对象
                    
                     myset = db.class0
                     myset = db['class0']
            
             【4】 通过集合对象调用接口完成数据操作
             【5】 关闭数据库连接
                 db.close()

      3. 数据基本操作
        
          【1】 插入文档

              insert_one() 插入一条文档
                 insert_many() 插入多个文档
                 insert() 插入一条或多条文档
                 save() 保存文档,当_id冲突时覆盖原有文档

           【2】 查找文档
              
                 find()  查找所有符合条件文档
                 find_one() 查找第一个符合条件文档

                find(query,field)
                 功能: 查找所有文档
                 参数: 形式同mongoshell 中find
                 返回: 游标对象

                * 所有的操作符使用加上引号,作为字符串形式
                 * mongodb中true false null使用python中True False None表示

                cursor对象属性函数

                  next()   获取下一个文档
                     limit()  获取前几条文档
                     skip()   跳过几条
                     count()  计数
                     sort()   排序

                    * 当游标使用for或者next取值后就不能使用skip,limit,sort操作了
                    
                     * sort 在pymongo中参数表达与mongoshell中不同
                       e.g. sort([('age',1)]) 表示age升序排序

          find_one(query,field)
                 功能:查找第一个符合条件文档
                 参数:同find
                 返回值:返回一个字典

            【3】 修改操作

              update_one()  修改一个文档
                 update_many() 修改多个文档
                 update()  修改一个或者多个文档
            
             【4】 删除操作

              delete_one()  删除一个文档
                 delete_many()  删除多个文档
                 remove() 删除一个或者多个文档

        【5】 复合操作
              
                 find_one_and_update()
                 find_one_and_delete()


       4. 数据库索引聚合操作

       【1】 索引操作
              
                 create_index()

                 功能:创建索引
                 参数:二元元组构成列表
                             e.g. [('age',1)] 表示对age创建正向索引
                            
                             * 直接写域名即表示对该域创建正向索引
                 返回:索引名称
                
                 list_indexes()  查看索引
                 drop_index()  删除索引
                 drop_indexes()  删除所有索引

        【2】 聚合操作
              
                 aggregate()

                 功能: 完成聚合操作
                 参数: 聚合管道 同mongoshell中聚合
                 返回值:数据操作结果游标对象


       5. 文件存储
           
             步骤:
             1. 导入bson二进制类型模块,连接数据库               
                      import bson.binary

                2. 选择要存储的文件使用rb方式读取内容

                3. 将读取的内容转换为bson格式

                     content = bson.binary.Binary(data)
                      功能:将bytes字串转换为bson形式
                      参数:bytes字串
                      返回值:转换后的数据

                4. 将内容插入数据库
                   

    作业 : 1. 将电子词典中数据库改用mongodb数据库完成
             2. 练习中grade 为每个文档增加一个域
                         
                          {score:{chinese:88,math:88,english:77}}
                          * 分数为50-100随机数
                          通过pymongo完成该练习
                    
                     3. 复习之间进程线程网络内容

  • 相关阅读:
    Beginning Python From Novice To Professional读书笔记
    Google's Python Class
    Screen scraping 3
    Screen scraping 1
    Screen scraping 2
    《发现你的销售力量》读书笔记
    不可思议的每日培训
    “项目计划与跟踪最佳实践”讲座(2010年7月)现接受企业申请
    “活用类图,把握需求主动权”讲座(2010年6月)现接受企业申请
    项目健康状况检查
  • 原文地址:https://www.cnblogs.com/shengjia/p/10474285.html
Copyright © 2020-2023  润新知