MongoDb使用笔记

  • MongoDB中的集合与文档相当于MySQL中的表与行
  • 数据库操作

    • 查看当前数据库名字 db
    • 所有物理上存在的数据库 show dbs
    • 创建/切换数据库 use dbname
    • 删除数据库 db.dropDatabase()
  • 集合

    • 创建集合 db.createCollection(name,options) 集合名称,配置(文档)

      • options => 固定集合大小 {capped:true,size:10} capped为true必须指定size大小

        ​ 自动在_id字段创建索引{autoIndexld:true} 默认为false

        ​ 设置文档最大数量 {max:10000} 可跟数组 {size:[S,M,L]}

    • 查看当前集合 show collections

    • 删除集合 db.集合名.drop()

  • 数据操作

      • db.集合名.insert(document) document字典(json)格式
      • db.stu.insert({_id:9999,name:“lqs”})
      • db.集合名.remove({}) # 全部删除
      • db.集合名.remone({条件},{参数})
      • db.stu.remove({gender:0,{justOne:true}}) # justOne为true/1只删除一条,默认false全删
      • db.集合名.update({条件}, {更新操作符},{multi:true}) # multi(可选)为true把满足条件全部更新,默认为false
      • 指定属性更新 db.stu.update({},{$set:{gender:0}})
    • 保存

      • db.集合名.save(document) # 文档_id不存在则添加,存在则修改
    • 查 db.集合名.find()

      • // limit() 读取指定数量的文档
        db.集合名.find().limit(num)   // num 要获取的文档数
        // skip() 跳过在指定数量的文档  可搭配limit,不分先后顺序
        db.集合名.find().skip(num)
        // 投影 返回指定字段的结果
        db.集合名.find({},name:1,age:1)  # 要显示的字段设为1
        // sort() 排序 字段:1 为升序  -1 降序
        dbb.集合名.find().sort({gender:-1,age:1})  # 先根据性别降序,在根据年龄升序
        // count() 统计
        db.集合名.find({条件}).count()  => db.集合名.count({条件})
        //distinct() 消除重复
        db.集合名.distinct('去重字段',{条件})
        db.stu.distinct("gender",{age:{$gt:18}})  # 年龄大于18的性别(去重)
        
  • 数据高级操作

    • 聚合 aggregate

      • db.集合名.aggregate([{管道:{表达式}}])
      • 接收数组 数组中添加多个条件
      • /管道 上一次的结果用作下一次的输入
        db.集合名.aggregate([{$match:{age:{$gt:20}}},$group:{_id:'$gender',counter:{$sum:1}}])  # 把查出年龄大于20的数据作为group中的输入数据,按性别分组,计算总和
        
      • 表达式

        • s u m , sum, sum,avg, m i n , min, min,max 计算和/平/最小/最大 与MySQL相同
        • $push 将结果插入到数组中
        • $first, $last 获取最前/后的数据
      • 管道

        • $group 分组
        • $match 过滤数据
        • $project 修改文档字段
        • $sort , $limit, $skip 排序/指定数量/跳过
        • $unwind 将数组类型的字段拆分 但默认会忽略空数组
          • { u n w i n d : " unwind:" unwind:"size"} 根据size字段的不同进行分组
          • {KaTeX parse error: Expected '}', got 'EOF' at end of input: unwind:{path:"size",preserveNullAndEmptyArrays:true}} 处理空数组/非数组/无字段/null的情况
    • 索引 createIndex()

      • 建立索引 1是升序 -1降序

        • db.集合名.createIndex({ 字段 : 1<-1> })
        • 唯一索引 则 该字段不能重复
          • db.集合名.createIndex({ 字段 : -1 }, { ‘unique’ : true})
        • 联合索引
          • db.集合名.createIndex({ 字段1 : 1 , 字段2 : -1})
      • 查看索引

        db.集合名.getIndexes()

      • 删除索引

        db.集合名.dropIndex( ’ 索引名称 ’ ) # 删除指定索引

        db.集合名.dropIndexes() # 删除所有索引

      //循环创建多条数据
      for(i=0;i<100000;i++){db.t1.insert({name:"test"+i,age:i})}
      //使用explain()进行查询性能分析
      db.t1.find({name:"test10000"}).explain("executionStats")
      //建立索引
      db.ti.ensureIndex(age:-1)
      
    • 安全

      • 超级管理员

        //创建数据库
        use admin
        //创建超级用户
        db.createuser({
            user:'admin',
            pwd:'123',
            roles:[{role:'root',db:'admin'}]  //指定用户角色,管理的数据库
        })
        //修改配置文件
        //重启服务
        //账号登录
        mongo -u 'admin' -p '123' --authenticationDatabase 'admin'
        
      • 普通名用户

        //先用超级管理员登陆,再进行用户创建
        //创建普通用户
        roles:[{role:'readWrite',db:'test1'}]
        //修改用户数据
        db.updateUser('test1',{pwd:'456'})   可修改pwd,roles属性
        
    • 复制(副本集) ==>集群

      • 特点
        • N个节点的集群
        • 任何节点都可做主节点
        • 所有写入操作都在主节点上
        • 自动故障转移
        • 自动恢复
      • 关闭主服务器后再重启,会发现从节点变为主节点,新启动的会变为从节点
    • 备份/恢复

      # 备份 -h 指定ip/端口  -d 指定数据库名  -o 备份数据存放位置
      mongodump -h 192.168.123.123 -d py3 -o ~/Desktop
      # 恢复  --dir备份数据所在位置
      mongostore -h 192.168.13.123 -d py3 --dir ~/desktop
      
    • Python交互

      # 导入pymongo
      import pymongo
      # 创建连接对象 ip/端口
      client = pymongo.MongoClient('localhost',27017)
      # 指定连接的数据库
      db = client.py3
      # 指定集合
      coll=db.t1
      # 遍历数据
      for coll1 in coll.find():
          print(coll1)
      # 总数
      print(coll.count())
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值