MongoDB基本操作命令

MongoDB基本操作命令

  1. MongoDB的启动服务
    1.开启服务 sudo mongod
    2.开启客户端 mongo

2.MongoDB的数据库操作
1.查看默认的数据库 db
2.查看所有的数据库 show databases dbs
3.查看所有的集合(表) show collections
4.切换数据库 use xxx
5.删除数据库 1.use xxx 2.db.dropDatabase()

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

4.文档数据增,删,改
1.增加
1.1 直接增加
db.xx.insert({key:value})
1.2 先字典 在增加
dict_data = {
name:“张三”,
age:19,
gender:true,
like:‘打游戏’
}
db.stu.insert(dict_data)

            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.xx.remove({})
     
    3. 修改数据
            db.xx.update(查询条件, 修改内容)
        
        1. 默认修改或者新增字段; 其他的字段删除了
        2. 只修改或增加 原有的字段; 其他字段不变 保留 $set
        db.xx.update({找},{$set:{}})
        3. 只要符合条件 都修改  字段 multi
        db.stu.update({gender:true},{$set:{age:100}},{multi:true})
        4. 删除字段  $unset
        db.stu.update({_id:5},{$unset:{age:''}})

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(
               {hometown:"桃花岛",age:18}
           )
           db.stu.find(
               {
                   $and:[
                       {hometown:"桃花岛"},
                       {age:18}
                   ]
               }
           )
        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.xx.find(
         {
         $where:带返回值的 匿名函数
         }
     )
        //取年龄 大于20岁的人  age > 20
       db.stu.find(
           {
               $where : function () {
                   return this.age > 20   
               }
           }
       )

6.查询结果显示
1.skip 跳过几个显示
2.limit 允许显示几个
//跳过两个 显示4个

        注意点:  没有顺序之分
        db.stu.find().skip(2).limit(4)
        db.stu.find().limit(4).skip(2)
       
       

   3.投影 显示哪些字段; 显示 true 
        db.xx.find(
            {查询条件},
            {字段:true}
        )
        
   4.sort 排序:  -1降序 1 升序
        // 年龄 排降序, 相同的按照id 降序
        db.stu.find({}).sort({age:-1,_id:-1})
       
   5.count 统计个数
    //统计所有
    db.stu.find({gender:true}).count()
    //   根据条件
    db.stu.count({gender:false})
   
   
   6.distinct 去重
       // 取出年龄 小于 60岁的; 籍贯
      db.xx.distinct("去重字段",{查询条件})
      db.stu.distinct('hometown',{})

7.聚合查询:
// 管道有顺序
db.xx.aggregate(
[
{管道1},
{管道2},
{管道3}
]
)

        // 多条件的 多件事  
        $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_sum:{$sum:"$age"},age_avg:{$avg:"$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:{$push:"$name"}}
                }
            )
            // 按照标准写法 书写 [ ]
            db.stu.aggregate(

                {
                    $group:{_id:"$gender",all_name:{$push:"$name"}}
                },
                {$unwind:"$all_name"}
            )

8.MongoDB的索引操作
1. 创建批量的数据 20W 的数据
for (let index = 0; index < 200000; index++) {

      db.time.insert(
          {_id:index,
            name:"name" + index,
            age:index
          }
      ) 
   }
   
   
   2. 查看 数据的时间 对比 毫秒
   db.xx.find().explain('executionStats')


   2.1 查看 _id  1毫秒
   db.time.find({_id:188888}).explain('executionStats')
   2.2 查看 name  118毫秒--2毫秒
   db.time.find({name:"name188888"}).explain('executionStats')
   2.3 查看 age   121毫秒--0毫秒
   db.time.find({age:188888}).explain('executionStats')
  
   3. 设置 ID索引ensureIndex
   db.time.ensureIndex({name:1})
   db.time.ensureIndex({age: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/mongosave
   备份: mongodump -h -d -o
    -h: host "IP:port"
    -d: 备份的数据库名字 db
    -o: 备份到哪里去

   mongorestore -h 127.0.0.1:27017 -d newdbs  --dir /Users/lpf/Desktop/mongosave/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 newdbs -c stu -o data.json 
mongoexport -h 127.0.0.1:27017 -d newdbs -c stu -o data.csv --type csv -f _id,name,age

-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
 
导入
mongoimport -d dbname -c collectionname --file filename --headerline --type json/csv -f field

mongoimport -d newdbs -c abc --file data.json
mongoimport -d newdbs -c mn --file data.csv --headerline --type csv

-d :数据库名
-c :collection名
--type :导入的格式默认json
-f :导入的字段名
--headerline :如果导入的格式是csv,则可以使用第一行的标题作为导入的字段
--file :要导入的文件

11.python和MongoDB的交互
1.建立链接
2.创建库
3.创建集合
4.插入数据

   db.createUser({user:'A',pwd:'123456',roles:['root']})
   db.createUser({user:'B',pwd:'123456',roles:[{db:'pymo',role:'read'}]})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值