美文网首页我爱编程
NoSQL数据库——MongoDB

NoSQL数据库——MongoDB

作者: 妄想成为正太的包蜀黍 | 来源:发表于2017-11-03 19:46 被阅读0次

    MongoDB简介和启动

    NoSQL数据库

    NoSQL数据库:Not only sql,指代非关系型数据库

    优点:高可扩展性、分布式计算、低成本、灵活架构、半结构化数据、简化关联关系

    缺点:没有标准化、有限查询、不直观

    windows下启动MongoDB
    安装路径的bin目录下启动命令行
    # 命令行输入mongod --dbpath (mongo中data文件下的db文件路径)
    D:\mongoDB\mongodb-win32-x86_64-2008plus-ssl-3.2.16-10-g281b824\bin>mongod --dbp
    ath D:\mongoDB\mongodb-win32-x86_64-2008plus-ssl-3.2.16-10-g281b824\data\db
    
    启动成功后不要关闭这个窗口,打开另一个窗口输入mongo命令

    MongoDB将数据储存为一个文档,数据由key=value的键值对方式储存,
    数据库[db]-->集合[collection]-->文档-->域

    MongoDB常用语法

    show dbs                       #查看所有数据库
    
    use users                      #进入users数据库,如果users不存在也会进入但是不会创建,
                                   #但是在这个数据库进行数据的操作后,users将被自动创建
    
    db.dropDatabase()              #删除进入的这个数据库
    
    show collections               #展示所有集合
    
    db.createCollections("users")  #创建一个名为users的集合
    
    db.users.drop()                #删除users集合
    
    MongoDB数据的增删改
    db.users.insert({id:1,name:"tom"})  # 插入数据,集合如果没有创建会自动创建
    
    db.users.find()                     
    # 查找所有数据,这是我们可以看到每一个域前都有一个文档id:_id,可以自定义_id的值
    
    db.users.update({name:”tom”}, {name:”jerry”}) 
    #更新满足name="tom"的文档,整个文档除了_id不会改变都会变化
    
    db.users.update({name:”tom”}, {$set:{name:”jerry”}})
    #更新满足条件的文档中域名为"name"的值,只会改变name
    
    db.users.update({条件}, {$set:{name:”people”}}, {multi:true})
    #更新符合条件的多行文档中对应的域
    
    db.users.remove({name:"tom"}) #删除name域名值为tom的文档
    
    db.users.remove({name:"people"}{justOne:false}) #删除所有name域名值为people的文档
    
    MongoDB的查询操作

    MongoDB的查询主要就是两个方法
    db.<集合名字>.find([{条件1},{条件2},...]).pretty()—————查询全部
    db.<集合名字>.findOne([{条件1},{条件2},...]).limit(5)———查询满足条件的第一个

          .pretty()是将查询到的数据格式化
          .limit(num)是限制查询的条数
          .skip(行数)是跳行查询
          .sort([{域名1:1/-1},{域名2:1/-1}])是升/降序排序,可以指定多个,

    所以主要是掌握MongoDB自带的条件算符和方法

    # 查询年龄小于/小于等于/大于/大于等于的所有文档
    db.users.find({age:{$lt/$lte/$gt/$gte:20}})
    
    # 查询年龄小于15,或者年龄大于20的所有文档,与条件直接写在条件列表中,或条件需要
    # {$or:[{条件1},{条件2}]}
    db.users.find({$or:[{age:{$lt:15}},{age:{$gt:20}}]})
    
    # 查询年龄在/不在10~15之间的所有文档
    db.users.find({age:{$in/$nin:[10,15]}})
    
    # 查询名字中以t开头,以m结尾的所有文档(正则查询)
    db.users.find({name:/^t\w.*m$/})    or   db.users.find({name:{$regex:"^t\w.*m$"}})
    
    MongoDB的去重

    MongoDB自带了去重操作,可以指定域

    db.users.distinct("age",{条件})              #将users集合中的age域去重
    

    MongoDB的主从双备(我也只是了解点QwQ)

    什么是复制

    复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性,并可以保证数据的安全性。复制还允许从硬件故障和服务中断中恢复数据

    为什么要复制

         ◆数据备份
         ◆数据灾难恢复
         ◆读写分离
         ◆高(24* 7)数据可用性
         ◆无宕机维护
         ◆副本集对应用程序是透明

    复制的工作原理

         ◆复制至少需要两个节点A、B...
         ◆A是主节点,负责处理客户端请求
         ◆其余的都是从节点,负责复制主节点上的数据
         ◆节点常见的搭配方式为:一主一从、一主多从
         ◆主节点记录在其上的所有操作,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致
         ◆主节点与从节点进行数据交互保障数据的一致性

    复制的特点

         ◆N 个节点的集群
         ◆任何节点可作为主节点
         ◆所有写入操作都在主节点上
         ◆自动故障转移
         ◆自动恢复

    实例操作:设置复制节点

    step1:创建数据库目录t1、t2

    在Desktop目录下演示,其它目录也可以,注意权限即可

        mkdir t1
        mkdir t2
    
    step2:使用如下格式启动mongod,注意replSet的名称是一致的
        mongod --bind_ip 192.168.10.110 --port 27018 --dbpath ~/Desktop/t1 --replSet rs0
        mongod --bind_ip 192.168.10.111 --port 27019 --dbpath ~/Desktop/t2 --replSet rs0
    
    step3:连接主服务器,此处设置192.168.10.110:27018为主服务器
        mongo --host 192.168.10.110 --port 27018
    
    step4:初始化
        rs.initiate()
    
    step5:查看当前状态
        rs.status()
    
    step6:添加复本集
        rs.add('192.168.10.111:27019')
    
    step8:新开窗口,连接第二个mongo服务
        mongo --host 192.168.10.111 --port 27019
    
    step9:向主服务器中插入数据
        use test1
        for(i=0;i<10;i++){db.t1.insert({_id:i})}
           db.t1.find()
    
    step10:在从服务器中插查询

         如果在从服务器上进行读操作,需要设置rs.slaveOk()

        rs.slaveOk()
        db.t1.find()
    
    其它说明

         删除从节点

        rs.remove('192.168.10.111:27019')
    

         关闭主服务器后,再重新启动,会发现原来的从服务器变为了主服务器,新启动的服务器(原来的主服务器)变为了从服务器

         熟练掌握MongoDB数据库也是Python工作者必须会的技能之一,对于大
         量数据的分析和提取,放入NoSQL数据库是很好的选择,MongoDB就是
         其中之一

    相关文章

      网友评论

        本文标题:NoSQL数据库——MongoDB

        本文链接:https://www.haomeiwen.com/subject/kylnpxtx.html