MongoDB数据库的学习(二)

一、Mongo基本命令-1

  1. 打开命令行:先打开运行(快捷键win+R),然后输入cmd后回车,就可以打开命令行工具。
  2. 执行mongod:在命令中直接输入mongod,但是你会发现服务并没有启动,报了一个exception,服务停止了。
  3. 新建文件夹:出现上边的错误,是因为我们没有简历Mongodb需要的文件夹,一般是安装盘的根目录,建立data/db,这两个文件夹。
  4. 运行mongod:这时候服务就可以开启了,链接默认端口是27017。
    链接服务:
  5. 服务端开启后,我们可以使用命令行来链接服务端,链接命令是mongo。重新打开一个命令行工具,然后输入mongo命令。也许你在链接时会报几个warning(警告),我们先不用管它,以后我们再慢慢学习。
    查看存在数据库命令:show dbs
    查看数据库版本命令:db.version()
  6. mongo shell 如果以前接触过数据库一定知道每个数据库都有自己独特的命令,MSSQL和MYsql用的都是Sql命令,MongoDB的操作命令就是前端最熟悉的JavaScript命令。看到这里作为前端你一定会小激动一下,这对前端来说那是极好的。
    先来一个常用的赋值和输出命令,熟悉一下。(操作前你需要打开Mongo服务器和链接到服务器-也就是我们上节课讲的mongod命令和mongo命令)在命令行中输入以下代码。
    var x='Hello World'
    print(x)
    
  7. 数据操作基础命令
  8. use db(建立数据库):use不仅可以进入一个数据库,如果你敲入的库不存在,它还可以帮你建立一个库。但是在没有集合前,它还是默认为空。
  9. db.集合.insert( ):新建数据集合和插入文件(数据),当集合没有时,这时候就可以新建一个集合,并向里边插入数据。Demo:db.user.insert({“name”:”jspang”})
  10. db.集合.find( ):查询所有数据,这条命令会列出集合下的所有数据,可以看到MongoDB是自动给我们加入了索引值的。Demo:db.user.find()
  11. db.集合.findOne( ):查询第一个文件数据,这里需要注意的,所有MongoDB的组合单词都使用首字母小写的驼峰式写法。
  12. db.集合.update({查询},{修改}):修改文件数据,第一个是查询条件,第二个是要修改成的值。这里注意的是可以多加文件数据项的,比如下面的例子。
    db.jspang.update({"name":"jspang"},{"name":"jspang","age":"32"})
    
  13. db.集合.remove(条件):删除文件数据,注意的是要跟一个条件。Demo:db.user.remove({“name”:”jspang”})
  14. db.集合.drop( ):删除整个集合,这个在实际工作中一定要谨慎使用,如果是程序,一定要二次确认。
  15. db.dropDatabase( ):删除整个数据库,在删除库时,一定要先进入数据库,然后再删除。实际工作中这个基本不用,实际工作可定需要保留数据和痕迹的。

二、用js文件写mongo命令

  1. 把命令写入JS中: 现在模拟一个用户登录日志表的信息,用JS进行编写。新在一个新建的目录下,比如D:/mongoShell/,新建一个goTask.js文件。文件内容如下:
    ar userName="jspang";    //声明一个登录名             
    var timeStamp=Date.parse(new Date());     //声明登录时的时间戳  
    var jsonDdatabase={"loginUnser":userName,"loginTime":timeStamp}; //组成JSON字符串
    var db = connect('log');   //链接数据库
    db.login.insert(jsonDdatabase);  //插入数据
    
    print('[demo]log  print success');  //没有错误显示成功
    
  2. 执行JS文件
  3. 写好了JS文件,需要执行起来,看一下文件是否存在问题,能否顺利的插入数据到MongoDB中。
    执行其实很简单,只要使用mongo xxx.js(xxx就是我们写的goTask.js文件)
    mongo goTask.js
    
  4. 然后我们可以在命令行看到已经执行成功,可以到终端中进行查看插入结果。
    总结:这节课很好的解决了在终端中写命令行的难题,虽然大部分Shell和在命令行中写法一样,但是也稍有不同,希望小伙伴们可以轻松掌握。

三、批量插入的正确方法

  1. 在操作数据库时要注意两个能力:
    第一个是快速存储能力。
    第二个是方便迅速查询能力。
  2. 批量数据插入是以数组的方式进行的(如果写错,可以3个回车可以切出来)。我们现在命令行中敲入下面的代码,我们可以看到数据顺利插入了。
    db.test.insert([
        {"_id":1},
        {"_id":2},
        {"_id":3}
    ])
    
  3. 老版本MongoDB(3.2以前的版本基本都需要)是需要在Insert前加一个batch单词的,如下代码。
    db.test.batchInsert([
        {"_id":1},
        {"_id":2},
        {"_id":3}
    ])
    
  4. 注意一次插入不要超过48M,向.zip和大图片什么的尽量用静态存储,MongoDB存储静态路径就好,这也算是一个规则。
  5. 刚学了批量插入,那是循环插入快?还是批量插入快那?在一般人的认知里肯定是批量插入更快(其实这毋庸置疑),但我们要拿出极客精神,探个究竟,试着写一个小Shell,来验证一下结果。
  6. 先写一个循环插入方法:
    var startTime = (new Date()).getTime(); //得到开始时间
    var  db = connect('log');  //链接数据库
    //开始循环
    for(let i=0;i<1000;i++){
        db.test.insert({num:i});
    }
    
    var runTime = (new Date()).getTime()-startTime;//计算时间差
    print ('This run this is:'+runTime+'ms');//打印出来
    
  7. 批量插入代码:
    var startTime = (new Date()).getTime();
    var  db = connect('log');
    
    
    var tempArray = []              //声明一个数组
    for(let i=0;i<1000;i++){        //循环向数组中放入值
        tempArray.push({num:i});
    }
    db.test.insert(tempArray)       //批量一次插入
    
    var runTime = (new Date()).getTime()-startTime;
    print ('This run this is:'+runTime+'ms');
    
  8. 总结:在工作中一定要照顾数据库性能,这也是你水平的提现,一个技术会了很简单,但是要作精通不那么简单。学完这节,记得在工作中如果在循环插入和批量插入举起不定,那就选批量插入吧,它会给我们更优的性能体验。

四、修改:Update常见错误

  1. 这节课开始我们要说一说Update的详细操作,我们先来看一下常见错误,我们知道了困难或者说问题在哪里,我们再提出解决方案。这节课我会先演示一些错误的Update方法,然后再说正确的方法。
  2. 错误1:只update修改项
  3. 如果你有过关系型数据库的经验,你会很容易犯只修改需要改变的一项,因为在关系型数据库中就是这样作的。先来准备一些数据,这些数据模拟了一个软件开发小组的组成(当然这不能当真)。
    var workmate1={
        name:'JSPang',
        age:33,
        sex:1,
        job:'前端',
        skill:{
            skillOne:'HTML+CSS',
            SkillTwo:'JavaScript',
            SkillThree:'PHP'
        },
        regeditTime:new Date()
    }
    
    var workmate2={
        name:'ShengLei',
        age:30,
        sex:1,
        job:'JAVA后端',
        skill:{
            skillOne:'HTML+CSS',
            SkillTwo:'J2EE',
            SkillThree:'PPT'
        },
        regeditTime:new Date()
    }
    
    var workmate3={
        name:'MinJie',
        age:20,
        sex:1,
        job:'UI设计',
        skill:{
            skillOne:'PhotoShop',
            SkillTwo:'UI',
            SkillThree:'Word+Excel+PPT'
        },
        regeditTime:new Date()
    }
    
    var db=connect('company')
    var workmateArray=[workmate1,workmate2,workmate3]
    db.workmate.insert(workmateArray)
    print('[SUCCESS]: The data was inserted successfully.');
    
  4. 上面的代码,我们以文件的形式向数据库中插入了3条数据。
    这时候我突然发现UI职位的性别出现了错误,本来人家是个美女,这里缺写成了男,我们需要修改这条数据,但是经常会这样写。
    这样写的问题是,我们的最后一条数据变成了只有sex:0,其它数据全部丢失了,这肯定不是我们想要的。这是新手在操作数据库修改时经常犯的一个错误,就是只修改变动的数据。
  5. 正确修改方法:
  6. 可以声明一个变量,然后把要改变数据的全部信息放入变量,最后执行修改操作。
    var db=connect('company')
    
    var workmate3={
        name:'MinJie',
        age:20,
        sex:0,
        job:'UI设计',
        skill:{
            skillOne:'PhotoShop',
            SkillTwo:'UI',
            SkillThree:'Word+Excel+PPT'
        },
        regeditTime:new Date()
    }
    db.workmate.update({name:'MinJie'},workmate3)
    
    
    print('[update]: The data was updated successfully');
    
  7. 这时候你需要删除(db.workmate.drop())表中的数据,因为MinJie这个用户已经不在数据库中了,然后重新使用load方法载入插入数据再进行修改。
    //执行命令如下:
    db.workmate.drop()
    load('./demo02.js')
    load('./demo03.js')
    
  8. 现在这种方法才是正确的,数据修改正常了,但是你会发现写起来非常麻烦,而且特别容易写错。下节课我们会介绍update修改器,可以很好的解决这个问题。

五、修改:初识update修改器

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值