FXHao

个人站

欢迎来到我的小世界~哈哈哈~


MongoDB

MongoDB

安装

  • 官网下载tgz包

  • 移动到usr/local/mongodb

  • 将可执行文件添加到PATH路径中

    export PATH=/usr/local/mongodb/bin:$PATH
    
  • 启动:

    sudo mongod --dbpath /var/lib/mongodb
    

database 基础命令

  • 查看当前数据库:db
  • 查看所有数据库:show dbs
  • 切换数据库:use 数据库名
  • 删除当前数据库:db.dropDatabase()

集合基础命令

  • 可以不用手动创建集合,使用时向里面插入数据,集合就自动建立了
  • 查看集合:show collections
  • 删除集合:db.集合名.drop()

数据类型

Object ID ⽂档ID(自动生成)
String 字符串, 最常⽤, 必须是有效的UTF-8
Boolean 存储⼀个布尔值, true或false
Integer 整数可以是32位或64位,这取决于服务器
Double 存储浮点值
Arrays 数组或列表, 多个值存储到⼀个键
Object ⽤于嵌⼊式的⽂档, 即⼀个值为⼀个⽂档
Null 存储Null值
Timestamp 时间戳, 表示从1970-1-1到现在的总秒数
Date 存储当前⽇期或时间的UNIX时间格式

数据基本操作

  • 插入数据:db.test1.inster()

    • _id:可以自己写,若空则会自动生成一个Object ID
    • db.test1.save()
      • 该方法也可以插入,但如果_id存在,则会更新对应的数据,而inster则会报错,无法插入
  • 更新:db.test1.update(<条件>,内容,{mult:true(全部)|false(一条)})

    db.test1.update({name:"范晓昊"},{name:"李二狗"})   # 整条数据都替换成 李二狗
    db.test1.update({name:"范晓昊"},{$set:{name:"李二狗"}})  # 只是把name的值替换成 李二狗
    
  • 删除:

    db.test1.remove({name:"范晓昊"},{justOne:true})  # 默认是删除全部满足条件的,justOne为true则只删一条
    
  • 查询:

    db.test1.find({条件})
    db.test1.findOne({条件})  # 只返回一条
    db.test1.find.pretty({条件})  # 将结果格式化,美化输出
    

运算符

  • 比较运算符

    等于 默认就是
    小于 $lt
    小于等于 $lte
    大于 $gt
    大于等于 $gte
    不等于 $ne
    db.test1.find({age:{$gte:18}})
    
  • 范围运算符:$in$nin

    db.test1.find({age:{$in:[18,28]}})
    
  • 逻辑运算符

    • and:直接写多个条件即可

      db.test1.find({age:{$gte:18},gender:true})  # 查询年龄⼤于或等于18, 并且性别为true的学⽣
      
    • or:$or

      db.test1.find({$or:[{age:{$gt:18}},{gender:false}]})  # 查询年龄⼤于18, 或性别为false的学⽣
      db.test1.find({$or:[{age:{$gte:18}},{gender:true}],name:'小王'})  # 查询年龄⼤于18或性别为男⽣, 并且姓名是小王
      
  • 支持正则

    # 用 // 或 $regx 编写正则表达式
    db.test1.find({name:/^/})  # 查询姓⻩的学⽣
    db.test1.find({name:{$regex:'^⻩'}})
    

limit和skip

  • limit() 用于读取指定数量的文档

    db.test1.find().limit(2)  # 查询两条信息
    
  • skip() 用于跳过指定数量的文档

    db.stu.find().skip(2)  # 跳过两条数据
    
  • 两个方法可以一起使用,无分先后

投影

  • 在查询到返回的结果中,只选择必要的字段

    db.集合名称.find({},{字段名称:1,...})
    db.stu.find({},{_id:0,name:1,gender:1})  # 字段为1则是显示,0则是不显示,_id默认为1
    

排序

  • 方法sort(),用于对集进行排序

    db.集合名称.find().sort({字段:1,...})
    db.stu.find().sort({gender:-1,age:1})  # 参数1为升序排列 参数-1为降序排列
    

统计个数

  • 方法count(),用于统计结果集中的文档条数

    db.集合名称.find({条件}).count()
    db.集合名称.count({条件})
    db.test1.find({gender:true}).count()
    db.test1.count({age:{$gt:20},gender:true})
    

消除重复

  • ⽅法distinct()对数据进⾏去重

    db.集合名称.distinct('去重字段',{条件})
    db.test1.distinct('hometown',{age:{$gt:18}})  # age为18的人的家乡
    

数据备份与恢复

  • 备份

    mongodump -h dbhost -d dbname -o dbdirectory
    mongodump -h 192.168.196.128:27017 -d test1 -o ~/Desktop/test1bak
    

    -h: 服务器地址, 也可以指定端⼝号

    -d: 需要备份的数据库名称

    -o: 备份的数据存放位置, 此⽬录中存放着备份出来的数据

  • 恢复

    mongorestore -h dbhost -d dbname --dir dbdirectory
    mongodump -h 192.168.196.128:27017 -d test1 -o ~/Desktop/test1bak
    

聚合 aggregate

  • 聚合(aggregate)是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage)组成的管道,可以对每个阶段的管道进行分组、过滤等功能,然后经过一系列的处理,输出相应的结果。

    db.集合名称.aggregate({管道:{表达式}})

  • 在MongoDB中,文档处理完毕后,通过管道进行下一次处理

  • 常用管道:

    $group 将集合中的⽂档分组, 可⽤于统计结果
    $match 过滤数据, 只输出符合条件的⽂档
    $project 修改输⼊⽂档的结构, 如重命名、 增加、 删除字段、 创建计算结果
    $sort 将输⼊⽂档排序后输出
    $limit 限制聚合管道返回的⽂档数
    $skip 跳过指定数量的⽂档, 并返回余下的⽂档
    $unwind 将数组类型的字段进⾏拆分
  • 表达式:处理文档并输出

    语法:表达式:'$列名'

    常用表达式:

    $sum 计算总和,$sum:1表示以⼀倍计数
    $avg 计算平均值
    $min 获取最⼩值
    $max 获取最⼤值
    $push 在结果⽂档中插⼊值到⼀个数组中
    $first 根据资源⽂档的排序获取第⼀个⽂档数据
    $last 根据资源⽂档的排序获取最后⼀个⽂档数据
    • $group

      • 将集合中的文档分组,可用于统计结果

      • _id表示分组的依据,使用某个字段的格式为’$字段’

      • 统计男生、女生的总人数

        db.test1.aggregate(
        	{$group:
        		{
        			_id:'$gender',
        			counter:{$sum:1}
        		}
        	}
        )
        
    • $match

    • 查询年龄大于20的

      db.test1.aggregate(
      	{$match:
      		{
      			age:{$gt:20}
      		}
      	}
      )
      

    索引

    • 创建
      • 可提升查询速度

        db.test1.ensureIndex({"name":1})
        

        放入多个属性可以建立联合索引,属性值1为升序

        加上{"unique":true}可建立唯一索引,可以消除重复

    • 查看当前索引

      db.test1.getIndexes()
      
    • 删除索引

      db.t1.dropIndex('索引名称')
      

pymongo

  • pip安装

  • 使用

    from pymongo import Mongoclient
    # 首先实例化client,建立连接
    client = Mongoclient(host='127.0.0.1',port=27017)
    collection = client['test']['t001']  # 前者为数据库名,后者为集合名
    collection.insert({'name':'范晓昊','age':18})
    

END…