• mongoDB-4


    前情回顾

    1. 修改器

    $inc $mul $max $min
    $push $pushAll $pull $pullAll $pop $addToSet $each $sort $position

    2. 删除文档

    deleteOne(query)
    deleteMany()
    remove()
    findOneAndDelete()

    3. 数据类型

    【1】 时间类型 : new Date()
    Date()
    ISODate()
    ValueOf()

    【2】 Null : null 表示空

    【3】 Object类型 :"外部域.内部域"


    4. 索引操作

    * 索引约束
    * 创建索引

    createIndex()
    createIndexes()
    ensureIndex()

    getIndexes()
    dropIndex()
    dropIndexes()

    5. 聚合操作

    aggregate([{},{},{}....])

    $group
    $sum
    $avg
    $max
    $min
    $match
    $limit
    $skip
    $sort

    **************************************************
    一. 聚合操作符(续)

    1. $project : 选择显示的域(值的写法同field参数)

    e.g. 筛选结果不显示_id
    db.class0.aggregate([{$match:{}},{$project:{_id:0,Name:'$name',Age:'$age'}}])

    练习: 使用grade

    1. 将所有男生按照年龄升序排序,结果不显示_id

    aggregate([$match:{sex:'m'},{$sort:{age:1}},{$project:{_id:0}}])

    2. 将所有喜欢画画的女生按照年龄排序,取年龄最小的三个,只显示姓名,年龄,爱好

    aggregate([{$match:{hobby:'draw',sex:'w'}},{$sort:{age:1}},{$limit:3},{$project:{_id:0,name:1,age:1,hobby:1}}])


    二. 固定集合

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

    特点: 1. 能够淘汰早期数据
    2. 可以控制集合大小
    3. 数据插入,查找速度快

    使用 : 日志处理,临时缓存

    创建 : db.createCollection(collection,{capped:true,size:10000,max:20})

    capped:true 表示创建固定集合
    size :10000 固定集合大小 字节
    max :20 固定集合可存放文档数量

    e.g. 创建固定集合log,最多存放3条文档
    db.createCollection('log',{capped:true,size:1000,max:3})


    三. 文件存储

    1. 文件存储数据库方式

    【1】 存储路径:将本地文件所在的路径以字符串存储到数据库中。

    优点: 操作简单,节省数据库空间
    缺点:当数据库或者文件发生变化需要修改数据库

    【2】 存储文件本身:将文件转换为二进制存储到数据库中。

    优点:文件绑定数据库,不容易丢失
    缺点: 占用数据库空间大,文件存取效率低

    2. GridFS文件存储方案

    目的:更方便的存取mongodb中大文件(>16M)

    说明:
    1. mongodb数据库中创建两个集合共同存储文件
    2. fs.files集合中为每个文件建立一个信息文档,存储文件的基本信息
    3. fs.chunks集合中每个文档建立与fs.files的关联,并将文件分块存储

    存储方法:
    mongofiles -d dbname put file

    e.g. 将Postman... 存储到grid数据库中
    mongofiles -d grid put Postman.tar.gz

    提取方法:
    mongofiles -d dbname get file

    e.g. 从数据库中获取Post...文件
    mongofiles -d grid get Postman.tar.gz

    优缺点 : 对大文件的存储提取方便,但是读写效率仍然比较低,不建议用来存储小文件。


    四. mongo shell 对 JavaScript支持

    * mongo shell界面中支持基本的JS代码
    * 通过js处理mongo的一些数据逻辑


    五. Python操作MongoDB

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

    2. 操作步骤

    【1】 导入模块,连接mongodb数据库

    from pymongo import MongoClient
    conn = MongoClient('localhost',27017)

    【2】 选择要操作的数据库和集合

    db = conn.stu # 选择数据库
    myset = db.class0 # 选择集合

    【3】 通过集合对象调用接口完成数据操作

    数据书写转换:

    文档 ----》 字典
    数组 ----》 列表
    布尔 ----》 python布尔
    null ----》 None
    操作符 ----》 字符串形式原样书写
    $lt "$lt"

    【4】 关闭数据库连接

    conn.close()


    3. 数据操作函数 (mongodb/mongo.py)

    【1】 插入文档

    insert_one() 插入一条文档
    insert_many() 插入多条文档
    insert() 插入一条或多条文档
    save() 插入文档,如果_id重复会覆盖

    【2】 查找操作

    cursor = find(query,field)
    功能:查找所有文档
    参数:形式同mongo中 find
    返回值:查找结果的游标对象

    cursor对象属性

    * 通过迭代获取每个查找文档结果
    * 通过调用属性方法对结果进行进一步操作
    next()
    limit()
    skip()
    count()
    sort([('age',1),('name',1)])

    注意:
    1.调用limit,skip,sort时游标必须没有遍历过
    2. sort排序写法域mongoshell不同
    {age:1,name:1}->[('age',1),('name',1)]


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

    【3】 修改操作

    update_one() 修改一个文档
    update_many() 修改多个文档
    update()

    【4】 删除操作
    delete_one() 删除一个文档
    delete_many() 删除多个文档
    remove()

    【5】 复合操作

    find_one_and_delete()

    【6】 索引操作

    create_index(index,**kwargs)
    功能: 创建索引
    参数: {name:1} --> [('name',1)]
    kwargs 索引选项
    返回值: 索引名称

    list_indexes() 查看索引
    drop_index() 删除索引
    drop_indexes() 删除所有索引

    【7】 聚合操作

    cursor = aggregate([{},{}])
    功能: 完成聚合操作
    参数: 聚合管道,同mongo shell
    返回值: 数据结果游标

    4. 文件存储

    import bson

    1. 将文件内容转换为bson二进制格式存储

    content = bson.binary.Binary(bytes)
    功能: 将python字节串转换为bson格式
    参数: 要转换的字节串
    返回值: bson数据

    2. 将bson数据 插入到mongo数据库文档中

  • 相关阅读:
    生活网站
    input 输入值的监听 禁止输入特殊字符
    jq 插件分享
    css3 特效分享
    sharepoint---RBS回收站清空设置
    &&和||
    DataTable得到某行某列的值
    后台刷新当前页面和弹出对话框跳转页面
    c#.netGr idView1在div不局中
    DIV UL LI
  • 原文地址:https://www.cnblogs.com/gyl10/p/11461049.html
Copyright © 2020-2023  润新知