MongoDB数据库的基本操作

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

2.数据库的操作:
1.查看默认的数据库 db
2.查看所有的数据库 show dbs
3.查看所有的集合(表) show collections
4.查看集合中的文档(行) db.xx.find()
5.删除数据库 先进入,再db.dropDatabase()

3.集合(表)的操作:
1.查看所有的集合 show collections
2.创建集合 db.createCollection(“集合名字”)
3.删除集合 db.xx.drop()
4.文档内容的增删改:
1.数据的类型
null
integer
Double
object
timestamps
Date Date(2017-01-01)
ObjectID:1,2,3,4 1.系统自动生成 2.手动指定
string
boolean
Array
2.增加数据:
db.xx.insert({key:Value})

        //1.新增一条数据
           db.one.insert(
                {
                _id:1,
                name:"张三",
                age:28  
                }
            )
            db.one.insert(
                {
                name:"老王",
                age:88  
                }
            )
        //2.先字典 后赋值
            dict = {
                _id:2,
                name:"小王吧",
                age:18  
            }
            db.one.insert(dict)
    3.删除
        db.xx.remove({条件})

        //1.删除老王 
            db.one.remove({name:"老王"})
        //2.删除所有的男生(默认 符合条件的都删除)
            db.one.remove({gender:true})
        //3. 只删除 符合条件的 第一个 justOne
            db.one.remove({gender:false},{justOne:true})
        //4.全部删除数据
            db.one.remove({})
    4.改 update
            db.xx.update({查找条件},{修改内容})

            //1.修改 小明 的名字 根据id
                //2. like
                //默认 其他的字段删除了
                db.one.update({_id:4},{name:"大明"})
                db.one.update({_id:5},{like:"男朋友"})

            //2.只想修改指定的字段; 其他的不变$set
                db.one.update({_id:7},{$set:{name:"霜霜"}})

            //3. 默认符合条件的只修改一个;全部修改 multi

                //男生的年龄 改成 30谁
                db.one.update(
                    {gender:true},
                    {$set:{age:30}}
                )
                //将女生的年龄 全部修改成 12岁
                db.one.update(
                    {gender:false},
                    {$set:{age:12}},
                    {multi:true}
                )

5.文档的基本查询操作:
1.基本查询
db.xx.find({查找条件}).pretty()

            1.1: db.xx.find() 查找所有的内容
            1.2: 查找所有的女生:返回所有符合条件的内容
                db.stu.find({gender:false})
            1.3:只返回符合条件的第一个
                db.stu.findOne({gender:true})
    2.条件运算: $lt $gt $lte $ne
            db.xx.find({字段:{运算符:值}})

            //1.筛选年龄大于20岁的人
                db.stu.find(
                    {
                        age:{$gt:20}
                    }
                )
            //2.筛选年龄 小于等于18岁的
                db.stu.find(
                    {
                        age:{$lte:18}
                    }
                )
            //3. 年龄不等于 45岁
                db.stu.find(
                    {
                        age:{$ne:45}
                    }
                )
    3.逻辑运算: $and $or
            db.xx.find({运算符:[{条件1},{条件1}]})

            1. $and 其实find默认多条件就是and
                db.stu.find(
                    {age:16,gender:true}
                )
                db.stu.find(
                    {
                        $and:[
                            {age:16},
                            {gender:true}
                        ]
                    }
                )
             // 年龄大于20; 男生
               db.stu.find(
                   {
                       $and:[
                           {age:{$gt:20}},
                           {gender:true}
                       ]
                   }
               )

            2. $or 
               // 年龄大约20岁,或者false 女生
               db.stu.find(
                   {
                       $or:[
                           {age:{$gt:20}},
                           {gender:false}
                       ]
                   }
               )

            3. $and 和 $or 混用的关系
              // 年龄下雨45岁或者是女生; 必须是来自桃花岛
              db.stu.find(
                  {
                      $ang:[
                          {$or:[
                               {age:{$lt:45}},
                                {gender:false}
                                ]
                            },
                          {hometown:"桃花岛"}
                      ]
                  }
              )

              // 来自蒙古或者是大理的人  要求必须是男士
              db.stu.find({$and:[{$or:[{hometown:"蒙古"},{hometown:"大理"}]},{gender:true}]})

    4.范围运算:$in  $nin
              db.xx.find({字段:{运算符:[值]}})
              //1. 18 20 40的岁
              db.stu.find(
                  {
                      age:{$in:[18,20,40]}
                  }
              )
              //2. 来自 大理 或者  蒙古
              db.stu.find(
                  {hometown:{$in:["大理","蒙古"]}}
              )
    5.正则表达式:
              1.db.xx.find({字段:/正则/})
              2.db.xx.find({字段:{$regex:"正则"}})

              //1. 段
              db.stu.find({name:/段/})
              db.stu.find({name:/liu/i})
              db.stu.find(
                  {
                      name:{$regex:"段"}
                  }
              )

              //2. 忽略大小写 $options
              db.stu.find(
                  {
                      name:{$regex:"liu",$options:"i"}
                  }
              )
    6.自定义函数:

            db.xx.find({$where:待返回值的匿名函数})
            //年龄小于 18的人
            //this 操作的内容
            db.stu.find(
                {
                    $where:function () {
                        return this.age < 18
                    }
                }
            )

6.查询结果的显示:
skip(n): 跳过几个在显示
limit(n): 允许显示几个

            db.stu.find().skip(2).limit(3)
            如果 skip和limit混用 结果一样的
    投影: 允许查看的字段
          db.xx.find({查询条件},{投影的条件字段:1})
          db.stu.find({gender:false},{_id:1})
    排序: 升序 1  降序 -1 sort({字段:1})
         db.stu.find().sort({age:-1,_id:-1})
    统计:count()
         db.xx.count({条件})
         db.xx.find().count()

         db.stu.count({age:{$gt:30}})
         db.stu.find({age:{$gt:30}}).count()
    去重:distinct()
        db.xx.distinct("去重的字段",{条件})
        // 取出年龄小于60岁一下 人的籍贯
        db.stu.distinct("hometown",{age:{$lt:60}})

7.python和MongoDB 的交互

            1. 127.0.0.1
            2. 27017
            3.连接数据库 客户端
            4. 根据客户端 创建数据库
            5. 创建集合
            6. 写入数据

MongoDB ——— 第二天
1.聚合查询:管道
db.xx.aggregate([{管道1},{管道2},{管道3}])

   $group: 分组:
            db.xx.aggregate([{$group:{_id:"$字段"}}])

            // 将数据  按照 性别分成两种组
            db.stu.aggregate(
                [
                    {$group:{_id:"$gender"}}
                ]
            )
            //按照性别分组 ,求出每组的年龄平均值 表达式
             // $avg $sum $max $min $last $first $push
            db.stu.aggregate(
                {
                    $group:{_id:"$gender",age_avg:{$avg:"$age"}}
                }
            )

            // 按照籍贯分组 求每个地方人的年龄之和
            db.stu.aggregate(
                {
                    $group:{_id:"$hometown",age_sum:{$sum:"$age"}}
                }
            )

            // 按照 性别分组; 想求出 最后一个人的年龄
            db.stu.aggregate(
                {
                    $group:{_id:"$gender",last_age:{$last:"$age"}}
                }
            )

            db.stu.aggregate(
                {
                    $group:{_id:"$gender",first_age:{$first:"$age"}}
                }
            )

            db.stu.aggregate(
                {
                    $group:{_id:"$hometown",max_age:{$max:"$age"}}
                }
            )

            //push 将获取的字段 按照分组 显示
            //按照性别分组 , 求出 每组的籍贯有哪些
            db.stu.aggregate(
                {
                    $group:{_id:"$gender",address:{$push:"$name"}}
                }
            )


   $match: 比较对比 和find功能一致; 区别在于使用管道
            db.xx.find({条件})
            db.xx.aggregate({$match:{比较的条件}})

            // 求出 年龄大于18岁的人
            db.stu.find({age:{$gt:18}})
            db.stu.aggregate({$match:{age:{$gt:18}}})

            // 求出 年龄小于40岁; 按照性别分组 两组
            db.stu.aggregate(
                {$match:{age:{$lt:40}}},
                {$group:{_id:"$gender",name_list:{$push:"$name"}}}
            )

   $project: 投影 :允许查看某个字段
            db.xx.aggregate({$project:{字段:1,自段:0}})

            //1. 求出年龄不等于18; 按照性别分组求出name;只显示名字
            db.stu.aggregate(
                {$match:{age:{$ne:20}}},
                {$group:{_id:"$gender",all_name:{$push:"$name"}}},
                {$project:{_id:0,all_name:1}}
            )

   $sort: 排序 1 升序 -1降序
           //1.按照籍贯 来自 大理和桃花岛;一 年龄降序
            db.stu.aggregate(
                {$match:{hometown:{$in:["大理","桃花岛"]}}},
                {$sort:{age:-1}}
            )
   $limit: 允许显示几个
   $skip: 跳过几个查看
         注意点: 因为管道是有先后顺序; 所以呢一般都不掉换顺序; 先跳后允许查看几个
          //先找 45以下 ;再 安籍贯 求平均值, 在 降序, 在投影
          db.stu.aggregate(
              {$match:{age:{$lte:45}}},
              {$group:{_id:"$hometown",avg_age:{$avg:"$age"}}},
              {$sort:{avg_age:-1}},
              {$project:{_id:1,avg_age:1}},
              {$skip:1},
              {$limit:2} 
          )

   $unwind: 将一组 列表的数据 分开成多个文档 
          // 筛选 安性别分两组;  求出每组人的名字
          db.stu.aggregate(
              {$group:{_id:"$gender",all_name:{$push:"$name"}}},
              {$unwind:"$all_name"}
          )

2.索引操作 : 通过索引查询 效率最高 时间
2.1 批量的创建数据
for (index = 0; index < 200000; index++) {
db.stu.insert(
{
_id:index,
name:”name”+index,
age:index
}
)
}

    2.2 时间查询时间 
     //1.通过 字段的内容查找 --executionTimeMillis 119毫秒
        db.stu.find({name:"name199999"}).explain("executionStats")

    //2. 通过索引查找 time 1毫秒
        db.stu.find({_id:199999}).explain("executionStats")

    //3. 系统自己分配id 记不住
         // 3.1 自定义索引
        db.stu.ensureIndex({name:1})
        db.stu.ensureIndex({age:1})

        //3.2 查看所有的 索引
        db.stu.getIndexes()

        //3.3 删除索引
        db.stu.dropIndex("name_1")

3.备份和恢复
-h IP:port
-d 数据库的名字
-o 备份到的地址
–dir 从哪里恢复
备份:sudo mongodump -h 192.168.101.33:27017 -d stu -o ~/Desktop/save/
恢复:sudo mongorestore -h 127.0.0.1:27017 -d stu –dir ~/Desktop/save/stu

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值