Mongo命令练习题

MongoDB命令帮助系统

了解数据库操作更详细的帮助命令

help

如果想要得到更多,而且每个命令的详细用法,可以使用上面列出的db.listCommands()查询。

数据库操作更详细的帮助命令

db.help()

对指定数据库的集合进行操作、管理和监控,可以通过查询db.mycoll.help()获取到:

db.mycoll.help()

基本命令及实例

(一)基本命令

  1. 显示当前数据库服务器上的数据库

    show dbs

  2. 切换到指定数据库pagedb的,可以在此管理pagedb数据库以及其中的集合等

    use pagedb

  3. 显示数据库中所有的集合(collection)

    show collections

  4. 查看数据库服务器的状态

    db.serverStatus()

  5. 查询指定数据库统计信息

    db.stats()

(二)常用DDL和DML

了解 DML、DDL、DCL、DQL专业名称

SQL语言共分为四大类:数据操纵语言DML,数据定义语言DDL,数据控制语言DCL,数据查询语言DQL。

DML(data manipulation language 数据操纵语言): 它们是UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言

DDL(data definition language 数据(库)定义语言): 主要的命令有CREATEALTERDROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用

DCL(Data Control Language 数据控制语言): 是数据库控制功能。是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行DCL

DQL(Data Query Language 数据查询语言):是数据库控制功能,包括 select 语句

  1. 创建数据库 mydatabase

    use mydatabase; (只是切换,不是创建)

  2. 创建集合 student

    db.createCollection("student",{capped:true,size:1000,max:100})

    试一下,max等于3或者size等于1,会怎么样?

  3. 插入更新记录

    表(student)

     {_id:1,classid:1,age:18,name:"little1",love:["football","swing","cmpgame"]}
     {_id:2,classid:2,age:19,name:"little2",love:["play"]}
     {_id:3,classid:2,age:20,name:"little3"}
     {_id:4,classid:1,age:21,name:"little4"}
     {_id:5,classid:1,age:22,name:"little5",opt:"woshisheia"}
     {_id:6,classid:2,age:23,name:"23little4"}
    

    插入

     db.student.save({_id:1,classid:1,age:18,name:"little1",love:["football","swing","cmpgame"]})
     db.student.save({_id:2,classid:2,age:19,name:"little2",love:["play"]})
     db.student.save({_id:3,classid:2,age:20,name:"little3"})
     db.student.save({_id:4,classid:1,age:21,name:"little4"})
     db.student.save({_id:5,classid:1,age:22,name:"little5",opt:"woshisheia"})
     db.student.save({_id:6,classid:2,age:23,name:"23little4"})
    

    或者

     db.student.insert([
     {_id:1,classid:1,age:18,name:"little1",love:["football","swing","cmpgame"]},
     {_id:2,classid:2,age:19,name:"little2",love:["play"]},
     {_id:3,classid:2,age:20,name:"little3"},
     {_id:4,classid:1,age:21,name:"little4"},
     {_id:5,classid:1,age:22,name:"little5",opt:"woshisheia"},
     {_id:6,classid:2,age:23,name:"23little4"},
     ])
    

    总结:集合一旦启动封顶模式,当max或者是size超出,新数据覆盖旧数据

  4. 查询一条记录/多条记录

    查询出name为little1的数据

    db.student.find({name:"little1"})

    从第二条查寻,查出三条

    db.student.find().skip(1).limit(3)

    查询出19<age<=21的数据

    db.student.find({age:{$gt:19,$lte:21}})

    查询出age为奇数的数据(对2求余为1即为奇数) $mod

    db.student.find({age:{$mod:[2,1]}})

    查询出存在opt字段的数据 $exists

    db.student.find({opt:{$exists:true}})

    查询出不存在opt字段的数据

    db.student.find({opt:{$exists:false}})

    查询出name不为little2的数据 $ne

    db.student.find({name:{$ne:"little2"}})

    查询出age为16,18,19的数据 $in

    db.student.find({age:{$in:[16,18,19]}})

    查询出age不为16,18,19的数据 $nin

    db.student.find({age:{$nin:[16,18,19]}})

    查询出love有三个的数据 $size

    db.student.find({love:{$size:3}})

    查询出name不是以litt开头的数据 $not $regex

    db.student.find({name:{$not:/^litt.*/}})

    查询age>20的数据

    db.student.find({age:{$gt:20}})

    按age升序

    db.student.find().sort({age:1})

    按age降序

    db.student.find().sort({age:-1})

    查询数据条数

    db.student.find().count()

  5. 删除记录

    删除age为20的数据

    db.student.remove({age:20});

  6. 创建索引

    创建索引 age

    db.student.ensureIndex({"age":1})

  7. 查询索引

    db.student.getIndexes()

  8. 删除索引

    db.student.dropIndex({"age" : 1})

  9. 统计集合记录数

    db.student.count()

  10. 删除集合 student

    db.student.drop()

  11. 删除数据库 mydatabase

    db.dropDatabase()

(三)安全管理

  1. 以安全认证模式启动

  2. 添加用户

  3. 安全认证

(四)数据备份、恢复与迁移管理

  1. 备份全部数据库

  2. 备份指定数据库

  3. 备份一个数据库中的某个集合

  4. 恢复全部数据库

  5. 恢复某个数据库的数据

  6. 恢复某个数据库的某个集合的数据

  7. 向MongoDB导入数据

  8. 从MongoDB导出数据

(五)远程连接管理

基于mongo实现远程连接

mongo --host 192.168.17.129 --port 27017

(六)聚合

  • 计算各班级平均年龄
db.student.aggregate([
 {
    $group: {
      _id: "$classid",
      avg_age: {
        $avg: "$age"
      }
    }
  }
]
)
  • 计算全班级平均年龄
db.student.aggregate([
 {
    $group: {
      _id: null,
      avg_age: {
        $sum: "$age"
      }
    }
  }
]
)

(七) MapReduce

  • 计算各班级平均年龄

分组统计(MapReduce):

var mapfun = function(){emit(this.classid,this.age);}

var reducefun = function(key, values){
    var total=0; 
    for(var i=0;i<values.length;i++){
        total += values[i];
    }
    return { classid: key, age_avg: total/values.length };
}

db.student.mapReduce(
      mapfun,
      reducefun,
      { out: "student_res" }
)

查询统计结果(分班级统计人数)

db.student_res.find()

  • 各班级统计人数

分组统计(MapReduce):

var mapfun = function(){emit(this.classid,1);}
var reducefun = function(key, values){
     return Array.sum(values);
}

db.student.mapReduce(
      mapfun,
      reducefun,
      { out: "student_sta" }
)

查询统计结果(分班级统计人数)

db.student_sta.find();