zoukankan      html  css  js  c++  java
  • MongoDB day04

    文件存储

    文件存储到数据库的方式

    1. 存储路径

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

    优点 : 节省数据库空间

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

    2. 存储文件本身

    以二进制方式将文件存储到数据库

    优点:数据库和文件绑定存在

    缺点 : 占用数据库空间大,存储效率低,结构化麻烦

    mongodb存储二进制文件

    * 大文件用GridFS方法存储  >16M为大文件

    * 将小文件文件转化为二进制,将文件存储到数据库

    GridFS方案解释

    1. 在mongodb中一个数据库创建两个集合配合完成对文件的存储

    2. fs.files 用来存储文件的相关信息,为每一个文件创建一个文档,存储文件名、文件类型等信息、存入时间

    3. fs.chunks 用来分块存储文件(Binery data类型数据)的实际内容

    存储方式

    mongofiles  -d  dbname   put   file

             数据库       要存储的文件

    * 如果数据库不存在自动创建;数据库总会自动创建fs.files  fs.chunks两个集合

    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值

    文件提取方法  mongofiles  -d  dbname  get  file

    Grid的优缺点

    优点 : 存储方便,提供较好的命令支持

    缺点 : 读写效率低

    游标

    通过一定的操作获取返回的对象

    var cursor = db.class1.find()

    cursor.hasNext()  判断是否有next

    cursor.next()  获取下一条数据

    python操作mongodb 

    pymongo模块   第三方模块

    安装

    sudo pip3 install pymongo

    操作步骤

    1、创建monggodb数据库连接对象

    conn = pymongo.MongoClient('localhost',27017)

    2、得到数据库对象

    db = conn.stu

    3、获取集合对象

    myset = db.class1

    4、增删改查,索引,集合

    调用各种myset的属性函数

    5、关闭数据库连接

    conn.close()

    插入操作

    insert()

    insert_many()  insert_one()

    查找操作

    cursor = find()

    功能:对数据库进行查找

    参数:同mongoshel find()

    返回值:返回游标对象

    cursor属性函数

    find_one()

    返回一个结果游标

    * 在pymongo中使用·操作符的方法与mongo shell中相同,只需要转变字符串格式加上引号即可

    cursor的属性函数

    next()

    limit()

    skip()

    sort([('name',1),('age',-1)])

    count()

    * 使用了next或者for取游标后就不能使用limit sort操作了 

    find_one()

    返回一个字典

    更新操作

    update(query,updata,upsert=False,multi=False)

    update_many()

    update_one()

    删除操作

    remove(query,multi = True)

    4通过循环遍历游标指定文件对象,read()读取文件内容写入本地

  • 相关阅读:
    vue 自定义指令
    vue 插槽
    vue 菜单跳转 页面错乱
    vue项目中使用elementUI的el-tabs组件 浏览器卡死问题 解决办法
    vue 环境配置
    移动端页面 问题 注意事项
    定义全局 强制刷新指令
    手机端样式 处理
    手机访问电脑本地开发的页面
    百度AI
  • 原文地址:https://www.cnblogs.com/LXP-Never/p/9515780.html
Copyright © 2011-2022 走看看