RUN__IT # MongoDB常用方法

MongoDB

1. MongoDB的启动服务
		sudo service mongodb start
        1.开启服务    sudo mongod 
        2.开启客户端  mongo
        
2.MongoDB的数据库操作 
        1.查看默认的数据库      db      
        2.查看所有的数据库     show dbs
        3.查看所有的集合()   db.createCollection('db_table_name')
        5.切换数据库         use  dbname  
        6.删除数据库         1. use xx, 2.db.dropDatabase()

3.MongoDB中的集合()的操作
        1.创建集合           db.createCollection()            
        2.创建内容(文档)      db.xx.insert({})
        3.删除集合           db.xx.drop()
        4.查询所有表        show collections    
        5.查询所有的内容     db.xx.find()


4.文档数据增,,1.增加
            1.1 直接增加
            db.xx.insert({})
            
            1.2 先字典 在增加
            stu_info = {
                name:"小明",
                age:12,
                gender:true,
                height:170,
            }
            db.second.insert(stu_info)
            
           
                db.stu.insert({_id:2,user:"小兰",age:16,gender:false})
                db.stu.insert({_id:3,user:"小芳",age:18,gender:false})
                db.stu.insert({_id:4,user:"大头儿子",age:8,gender:true})
                db.stu.insert({_id:5,user:"小头爸爸",age:38,gender:true})
                db.stu.insert({_id:7,user:"皮几万",age:25,gender:true})

                db.stu.insert({_id : 1, name:'郭靖',hometown:'蒙古',age:20,gender:true})
                db.stu.insert({_id : 2, name:'黄蓉',hometown:'桃花岛',age:18,gender:false})
                db.stu.insert({_id : 3, name:'华筝',hometown:'蒙古',age:18,gender:false})
                db.stu.insert({_id : 4, name:'黄药师',hometown:'桃花岛',age:40,gender:true})
                db.stu.insert({_id : 5, name:'段誉',hometown:'大理',age:16,gender:true})
                db.stu.insert({_id : 6, name:'段王爷',hometown:'大理',age:45,gender:true})
                db.stu.insert({_id : 7, name:'Lily',hometown:'英国',age:45,gender:true})

        2. 删除数据
            1.  默认删除所有符合条件的数据
            db.xx.remove({删除条件})

            2. 只想删除符合条件的一个数据
            db.xx.remove({删除条件},{justOne:true})

            3.删除所有的数据
            db.stu.remove({})
            
         
        3. 修改数据
                db.xx.update(查询条件, 修改内容)
            
            1. 默认修改或者新增字段; 其他的字段删除了

            2. 只修改或增加 原有的字段; 其他字段不变 保留 $set
            db.xx.update({找},{$set:{}})
            3. 只要符合条件 都修改  字段 multi
            db.xxx.update({},{$set:{}},{multi:true})

            4. 删除字段  $unset
            db.xxx.update({},{$unset:{}})
           
            
         
           
                    
5.数据的基本查询: 
        1.基本查询{
             1.查询所有的数据 
            db.xx.find()
            db.xx.find({})
             2.指定条件查询
            db.xx.find({查询条件})
             3. 只查找符合条件的一个
            db.xx.findOne()
         
        }
        2.条件运算 $lt $gt $lte $gte $ne
            //年龄大于 20岁的人
           db.stu.find({age:{$gt:20}})

        3.逻辑运算 $and  $or
         
            1. 默认find的多条件 就是 $and
               //籍贯是 桃花岛 年龄是18岁的
               db.stu.find({gender:false,hometown:"桃花岛"})
               db.stu.find(
                   {
                       $and:[
                           {gender:false},
                           {hometown:"桃花岛"}
                       ]
                   }

               )
            2. $or
               // 来自大理 或者是女生的
               db.stu.find(
                   {
                       $or:[
                           {hometown:"大理"},
                           {gender:false}
                       ]
                   }
               )
               
            3. 混合使用
               // 来自桃花岛或者年龄小于45岁 必须是男生
               db.stu.find(
                   {
                      $and:[
                          {
                              $or:[
                                  {hometown:"桃花岛"},
                                  {age:{$lt:45}}
                              ]
                          },
                          {gender:true}
                      ] 
                   }
               )
               
               // 来自大理或者来自蒙古   必须男的 年龄大于16   
            
        4.范围运算符 $in  $nin  
        db.stu.find(
            {
             hometown:{$in:['大理','蒙古']}
            }
        )
            
           

        5.正则表达式{
               db.xx.find(
                   {字段:'正则表达式'}
               )

               1. /正则/  
               db.stu.find(
                   {name://}
               )
        

               2.{$regex:"正则"}
               db.stu.find(
                   {
                     name:{$regex:"段"}
                   }
               )
               
               
               3. 忽略大小写
               3.1 db.stu.find({name:/lily/i})
               3.2 db.stu.find(
                   {
                       name:{$regex:"lcf",
                            $options:"i"}
                   }
               )
            }

        6.自定义函数  $where
        db.stu.find(
            {
                $where:匿名函数带返回值
            }
        )
        
        //取年龄 大于20岁的人  age > 20
        db.stu.find(
            {
                $where:function () {
                    return this.age>20
                }
            }
        )
           
           


6.查询结果显示
       1.skip 跳过几个显示
       2.limit 允许显示几个
            //跳过2个 显示4个
            
            注意点:  没有顺序之分
            db.stu.find().skip(2).limit(4)
            db.stu.find().limit(4).skip(2)
           
           

       3.投影 显示哪些字段; 显示 true
       db.stu.find({gender:true},{name:true}) 
            
            
       4.sort 排序:  -1降序 1 升序
            // 年龄 排降序, 相同的按照id 降序
           db.stu.find().sort({age:-1,_id:-1})
           
       5.count 统计个数
        //统计所有
        db.stu.find().count()
        //   根据条件
        db.stu.count()

       
       6.distinct 去重
           // 取出年龄 小于 60岁的; 籍贯
          db.xx.distinct("去重字段",{查询条件})
      
        
7.聚合查询:  
        // 管道有顺序  
        db.xx.aggregate(
            [
                {管道1},
                {管道2},
            ]
        )
       
            // 多条件的 多件事  
            $group: 分组
                // 数据按照 gender性别分组
               db.stu.aggregate(
                    [
                        {$group:{_id:"$gender"}}
                    ]
               )
               
                // 表达式: $sum $avg $first $last $max $min  $push
                // 数据按照 性别分组 求年龄的平均值
                db.stu.aggregate(
                    {
                        $group:{
                            _id:"$gender",
                            age_avg:{$avg:"$age"}
                        }
                    
                    }
                )
                
                // 按照籍贯分组, 求年龄和
                db.stu.aggregate(
                    {
                        $group:{
                            _id:"$hometown",
                            age_sum:{$sum:"$age"}
                        }
                    }
                )
                
           
                // $push  将分组想取出来的数据 放入到一个列表
                //  取出 按照性别分组的 所有人的名字
                db.stu.aggregate(
                    {
                        $group:{
                            _id:"$gender",
                            all_name:{$push:"$name"}
                        }
                    }
                )
                 
              
            $match: 查找符合条件的数据 ; find 区别
                    // 查询功能一样
                    // match可以配合管道使用的

                   // 取出年龄大于20人
                   db.stu.find({age:{$gt:20}})
                   db.stu.aggregate(
                       {
                           $match:{age:{$gt:20}}
                       }
                   )
                   
                   // 取出年龄小于40的; 按照性别分组求年龄平均值($avg)
                   db.stu.aggregate(
                       {$match:{age:{$lt:40}}},
                       {$group:{_id:"$gender",age_avg:{$avg:"$age"}}}
                   )
                   
       
                 
            $project:投影取出部分字段; 显示1  
                   // 取出年龄大于20; 按照籍贯分组 求出年龄之和,求年龄平均值; 查看的时候只想看到之和
                   db.stu.aggregate(
                       {$match:{age:{$gt:20}}},
                       {$group:{_id:"$hometown",age_sum:{$sum:"$age"},age_avg:{$avg:"$age"}}},
                       {$project:{age_sum:1}}
                   )
                  
                   
                //    {$project:{_id:1,age_sum:0}} 错误演示
                //    db.stu.aggregate(
                //     {$group:{_id:"$hometown", age_sum:{$sum:"$age"},age_avg:{$avg:"$age"}}},
                //     {$project:{age_avg:0,age_sum:1}}
                //    )
                 

            $sort: 排序 1升序 -1降序
                   //先找 45以下 ;再 安籍贯分组 求平均值,之和 在 降序, 在投影
                   
                   db.stu.aggregate(
                       {$match:{age:{$lt:45}}},
                       {
                           $group:{
                               _id:"$hometown",
                               age_avg:{$avg:"$age"},
                               last_sum:{$last:"$age"}
                           }
                        },
                        {$sort:{age_avg:-1}},
                        {$project:{age_avg:1}}
                      
                   )
                   
                 
                   
                   //注意点: 管道是有顺序的 不能随意颠倒; 根据需求
            $skip  跳过几个查看
            $limit 允许显示几个

                   //先跳2个 在显示 4个
            db.stu.aggregate(
                {$skip:2},
                {$limit:4}
            )
            db.stu.aggregate(
                {$limit:4},
                {$skip:2}
                
            )
                  
                       
            $unwind :将数据列表 分割  拆分
                  //按照性别分组, 求出人的名字 $push
                  db.stu.aggregate(
                      {$group:{_id:"$gender",all_name_list:{$push:"$name"}}},
                      {$unwind:"$all_name_list"}
                  
                      )
                
                
                 
              
   
                   
8.MongoDB的索引操作
       1. 创建批量的数据 20W 的数据
       for (var index = 0; index < 200000; index++) {
          
          db.stus.insert({
              _id:index,
              name:"name"+index,
              age:index
          }) 
       }
       
       
       2. 查看 数据的时间 对比 毫秒
       db.xx.find().explain('executionStats')


       2.1 查看 _id  0毫秒
       db.stus.find({_id:188888}).explain('executionStats')

       2.2 查看 name  134毫秒---2毫秒
       db.stus.find({name:"name188888"}).explain('executionStats')
       2.3 查看 age   142毫秒
       db.stus.find({age:188888}).explain('executionStats')
      
       3. 设置 ID索引ensureIndex
       db.stus.ensureIndex({name:1})
    
       查询 所有的索引
       db.time.getIndexes()

       4. 删除 自定义的索引
       db.time.dropIndex('name_1')
     
          


9.MongoDB的备份和恢复
      
  
       mongodump -h 127.0.0.1:27017 -d stu -o /Users/lpf/Desktop/mongodata
       备份: mongodump -h -d -o
        -h: host "IP:port"
        -d: 备份的数据库名字 db
        -o: 备份到哪里去

     
       mongorestore -h 127.0.0.1:27017 -d newstu --dir /Users/lpf/Desktop/mongodata/stu

       恢复: mongorestore -h -d --dir
        -h: host
        -d: 恢复的数据的名字
        --dir :从哪里恢复 

       
10 数据的导出和导入
    mongoexport -h dbhost -d dbname -c colname -o filename --type json/csv -f field 

    mongoexport -h 127.0.0.1:27017 -d newstu -c stu -o data.json 
    mongoexport -h 127.0.0.1:27017 -d newstu -c stu -o data.csv --type csv -f name,age,hometown
  
    -h: 服务器地址
    -d: 数据库名
    -c: 集合名
    -o: 导出文件名
    --type: 文件类型,默认json格式,可选数据类型json,csv
    -f: 需要导出的字段,导出为json格式的数据时可以不指定导出哪些字段,默认全部,导出成csv文件是必须指定
    示例:mongoexport -h 192.168.196.128:27017 -d test2 -c col1 -o test1_col1 [--type csv -f name,age,number]
    mongoexport -h "127.0.0.1:27017" -d stu -c stu -o test.json --type json

    mongoexport -h "127.0.0.1:27017" -d jd -c sj -o jdsj.csv --type csv -f sku_0,sku_2


     
    导入
    mongoimport -d dbname -c collectionname --file filename --headerline --type json/csv -f field
   
    mongoimport -d newstu -c student --file data.json 
    mongoimport -d newstu -c stucsv --file data.csv --headerline --type csv

       
    -d :数据库名
    -c :collection名
    --type :导入的格式默认json
    -f :导入的字段名
    --headerline :如果导入的格式是csv,则可以使用第一行的标题作为导入的字段
    --file :要导入的文件
    
    
    
10.python和MongoDB的交互
       1.建立链接
       2.创建库
       3.创建集合
       4.插入数据


    //    db.createUser({user:'B',pwd:'123456',roles:[{db:'pymo',role:'read'}]})
      
    db.createUser({user:'A',pwd:'123456',roles:['root']})
    db.createUser({user:'B',pwd:'123456',roles:[{db:'pystu',role:'read'}]})
       

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值