MongoDB day04

MongoDB day04

聚合操作

符号 含义 例子
$limit 显示前几条文档 获取数据的前两个文档:db.class1.aggregate({$limit:2})
$skip 跳过几条文档 跳过前两条文档显示后面内容 :db.class1.aggregate({$skip:2})
$sort 排序 按年龄升序排序:db.class1.aggregate({$sort:{age:1}})

聚合管道 :

  1. 作用: 将前一个聚合操作得到的结果,给后一个 聚合操作继续使用
  2. 格式:db.collection.aggregate([聚合1,聚合2….])
  3. e.g. m a t c h > project —> $sort
    db.class1.aggregate([{$match:{sex:'m'}},{$project:{_id:0}},{$sort:{age:1}}])
  4. e.g. g r o u p > match
    db.class1.aggregate([{$group:{_id:'$name',num:{$sum:1}}},{$match:{num:{$gt:1}}}])

  5. 练习:增加分数域 score:{chinese:88,math:76,english:76}

    1. 学生按照性别分组,统计每组人数
      aggregate({$group:{_id:'$sex',num:{$sum:1}}})

    2. 统计每名男生的语文分数
      aggregate([{$match:{sex:'m'}},{$project:{_id:0,name:1,'score.chinese':1}}])

    3. 将所有女生按照英语成绩降序排序
      aggregate([{$match:{sex:'w'}},{$sort:{'score.englisth':-1}}])

固定集合

  1. 定义:mongodb中可以创建大小固定的集合,称之为固定集合
  2. 特点 :
    2. 插入速度快,顺序查找速度快
    1. 能够淘汰早期数据
    1. 可以控制集合大小
  3. 使用 :
    2. 临时缓存
    1. 日志处理
  4. 格式: db.createCollection(collection,{capped:true,size:10000,max:1000})
    capped:true 表示创建固定集合
    size : 表示集合的大小 bytes 4.0最小 4096
    max : 表示最多存放多少文档

  5. e.g.
    db.createCollection('log',{capped:true,size:10,max:3})

文件存储

  1. 文件存储到数据库方式

  2. 存储路径
    将文件在本地的路径以字符串形式存储到数据库

    优点 : 节省数据库空间
    缺点 : 当数据库或者文件位置发生变化时文件丢 失。

  3. 存储文件本身
    以二进制方式将文件存储到数据库

    优点:数据库和文件绑定存在
    缺点 : 占用空间大,结构化麻烦

mongodb存储二进制文件

  1. 前提条件:

    • GridFS方法存储大文件 >16M为大文件
    • 将文件转化为二进制,进行插入 Binary data
  2. GridFS方案解释

    1. 在mongodb中一个数据库创建两个集合共同完成对文件的存储
    2. fs.files 用来存储文件的相关信息,为每一个文件创建一个文档,存储文件名、文件类型等信息
    3. fs.chunks 用来分块存储文件的实际内容
  3. 如何存储

    1. 格式:

      mongofiles  -d  dbname   put   file
                      数据库       要存储的文件
       注意:如果数据库不存在自动创建
      fs.files
      { "_id" : ObjectId("5b569b8969d72e103282f608"), "chunkSize" : 261120, "uploadDate" : ISODate("2018-07-24T03:22:54.259Z"), "length" : 247759369, "md5" : "a94853f4f64b3e87bf98aea770855615", "filename" : "abc.mp4" }
      
      fs.chunks
      { "_id" : ObjectId("5b569b8969d72e103282f61d"), "files_id" : ObjectId("5b569b8969d72e103282f608"), "n" : 20, "data" : BinData(0,"7Pa7M7M9nZt2bezsz272vbdm/7fhu672fwAAbZKbmR2S7Ndv/.....")}
      
      * 对于同一个文件 fs.files中的_id值等于 fs.chunks中的files_id值
  4. 文件提取方法
    1. 格式:mongofiles -d dbname get file
    2. Grid的优缺点
      优点 : 存储方便,提供较好的命令支持
      缺点 : 读写效率低

游标

通过一定的操作获取返回结果的对象
var  cursor = db.class1.find()
cursor.hasNext()  判断是否有next
cursor.next()  获取下一条数据

python操作mongodb

  1. 安装
    sudo pip3 install pymongo

  2. 操作步骤

    1. 创建mongodb数据库连接对象
      conn = pymongo.MongoClient('localhost',27017)
    2. 得到数据库对象
      db = conn.stu
    3. 获取集合对象
      myset = db.class1
    4. 增删改查,索引 ,聚合
      调用各种myset的属性函数
    5. 关闭数据库连接
      conn.close()
  3. 插入操作

    insert()
    insert_many()  
    insert_one()
    save()
  4. 查找操作

    1. 方法: cursor = find()#返回一个结果游标
    2. 注意: 在pymongo中使用操作符的方法与mongo shell中相同,只需要转变为字符串格式加上引号即可

    3. cursor 的属性函数

      next()
      limit()
      skip()
      sort([('name',1),('age',-1)])
      count()
      
      #使用了next或者for取游标后就不能使用limit sort操作了
      
    4. 方法find_one()#返回一个字典

  5. 更新操作

    update(query,updata,upsert=False,multi=False)
    update_many()
    update_one()
  6. 删除操作

    1. 格式:remove(query,multi = True)
      multi默认为True表示删除所有筛选内容
      如果设置为False则表示删除一条
  7. 复合功能函数
    find_one_and_delete()

  8. 索引操作

    ensure_index()   创建索引
    list_indexes()   查看索引
    drop_index()   删除索引
    drop_indexes()  删除所有索引
  9. 聚合操作

    1. 格式:aggregate([])
      参数写法和mongo shell中聚合相同
      返回值 : 返回一个迭代游标 同find()
  10. GridFS 程序提取

    
    import gridfs 
    gridfs.GridFS(db)
    插入二进制格式数据
    import bson.binary 

猜你喜欢

转载自blog.csdn.net/luohongtuCSDN/article/details/81202494