美文网首页
mogodb学习报告(一)

mogodb学习报告(一)

作者: Mr_Lance | 来源:发表于2016-07-06 21:27 被阅读203次

    概述


    MongoDB是什么?

    MongoDB的作用,使用场景?

    MongoDB的使用方式?

    <br />

    MongoDB是什么,有什么特点。


    MongoDB是一种NoSql数据库,是一个使用C++开发的高性能,开源,无模式的文档型数据库。MongoDB是面向文档的,文档以JSON格式,二进制JSON (BSON) 存储在MongoDB中。官方网站地址是:http://www.mongodb.org/

    主要特点有:面向集合存储,易存储对象类型的数据,模式自由并且支持动态查询。支持完全索引,查询,支持服务器之间的数据复制和故障恢复。使用高效的二进制数据存储,包括大型对象(如视频等)。自动处理碎片,以支持云计算层次的扩展性,可动态添加额外的机器。支持Python,PHP,Ruby,Java,C,C#,Javascript,Perl及C++等

    MongoDB的作用,使用场景?


    适用场景
    • 网站实时数据处理,它非常适合实时的插入、更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
    • 大尺寸,低价值的数据,使用传统的关系型数据库存储一些数据时可能会比较昂贵,可以用MongoDB代替。
    • 高伸缩性的场景,非常适合由数十或数百台服务器组成的数据库。
    不适用场景
    • 要求高度事务性的系统,不可靠环境保证高可用性
    • 复杂的跨文档(表)级联查询。

    MongoDB使用方式


    MongoDB安装(CentOS6.5)

    根据系统类型和位数选择合适的安装包。Linux 32-bit legacy 这个版本不推荐在正式环境使用,这个版本特点是没有连接ssl相关的库,并且可能缺少针对操作系统的一些性能优化,但是可以测试用,安装简单。推荐按相应操作系统版本选择对应的安装包如centos6 rhel6选择RHEL 6 Linux 64-bit。

    wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.7.tgz -P /tmp/
    

    创建数据库文件夹,日志文件夹和编写编辑文件

    mv /tmp/mongodb-3.2.7 /usr/local/mongodb
    cd /usr/local/mongodb
    mkdir db
    mkdir logs
    cd bin
    

    编写配置文件

    vim /usr/local/mongodb/mongodb.conf
    
    dbpath = /usr/local/mongodb/db   #数据库地址
    logpath= /usr/local/mongodb/logs/mongodb.log #日志
    port = 27017 #端口
    journal=no #不持久化,灾备
    storageEngine=mmapv1 #3.0以上默认使用wiredTiger,系统不支持可以切换回mmapv1(待深究)
    fork=yes #后台运行,守护进程
    pidfilepath = /var/run/mongodb/mongod.pid 
    auth = true #开启验证
    

    开启MongoDB服务

    /usr/local/mongodb/bin/mongod --config /usr/local/mongodb/bin/mongodb.conf #开启服务
    echo "/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/bin/mongodb.conf" > /etc/rc.local #设置开机启动
    

    添加超级管理员

    /usr/local/mongodb/bin/mongo #连接mongodb
    
    #切换admin数据库,如果不存在自动创建
    use admin 
    #3.0以下用addUser。role权限,db指数据库。root超级管理员,还有其他的权限如_system内部角色,UserAdmin,dbAdmin等
    db.createUser({    
        user:"admin", 
        pwd:"123456", 
        roles:[{role:"root",db:"admin"}]  #
    })
    
    #验证用户,登录
    db.auth("admin","123456")  
    
    

    修改防火墙配置

    #首先,所有访问27017 端口的请求都会被拒绝
    iptables -I INPUT -p tcp --dport 27017 -j DROP
    #当然,自己不能被挡在外面,给自己开个后门
    iptables -I INPUT -s 127.0.0.1 -p tcp --dport 27017 -j ACCEPT(出于业务逻辑的需要,有时还需要对服务器的公网IP授权)
    #保存修改
    /etc/rc.d/init.d/iptables save  
    #重启防火墙
    service iptables restart
    

    MongoDB的数据库常用操作命令

    # 帮助文档,yourColl指的是集合
    help
    db.help()
    db.yourColl.help()
    db.youColl.find().help()
    rs.help();
    #显示所有数据库
    show dbs
    #当前数据库
    db
    #显示所有用户
    show users;
    

    用户命令

    # 切换数据库,用户登录前必须切换到对应的数据库。超级管理员权限也无法在非用户对应的数据库登录。
    use admin
    # 用户登录
    db.auth("username","pwd");
    # 显示当前验证用户的权限。
    show roles 
    

    切换数据库,添加数据

    use test
    # 显示test数据库里面的所有集合,数据表
    show collections
    # 插入数据
    db.user.insert({
      username:"lance",
      age:"18",
      grande:"男",
      job:['coder','PHPer']
    })
    db.user.insert({
      username:"maven",
      age:"28",
      grande:"男",
      job:['designer','coder']
    })
    

    查询数据

    # 默认显示20条,DBQuery.shellBatchSize=NUM控制显示调试,it翻页
    db.user.find(); 
    # 格式化输出
    db.user.find().pretty() 
    # 条件查询相当于where username="lance"
    db.user.find({username:"lance"}) 
    # select age,job where username="maven",1表示显示,0表示不显示,用true或者false也可以。
    db.user.find({username:"maven"},{age:1,job:1}) 
    
    # 相当于where age >=20, $gt大于,$lt小于,$ne不等于。
    # 按理应取到maven的数据,但maven的age字段是字符串类型,搜索条件的age是int类型,得不到数据。应该用db.user.find({age:{$gte:"20"}})
    db.user.find({age:{$gte:20}}) 
    # 相当于where username like "la%",正则表达式^$
    db.user.find({username: /^la/});
    
    # sort 排序,1为升序,-1为降序
    db.user.find().sort({age: 1}); 
    # 获取前5条数据
    db.user.find().limit(5); 
    # 跳过前5条,获取10条数据,用于分页
    db.user.find().limit(10).skip(5);
    # where age = '18' or age= '28',或查询
    db.user.find({$or: [{age: 18}, {age: 28}]}); 
    

    更新数据

    db.user.update({'username':'maven'},{$set:{'age':'20'}}) #更新一条数据
    db.user.update({'username':'maven'},{$set:{'age':'20'}},{multi:true})#更新所以符合条件的数据
    db.user.update({'username':'maven'},{$set:{'age':'20'}},{upsert:true})#如果需要更新的数据不存在则插入一条数据。
    

    删除数据

    db.user.remove({'username':'lance'}) #删除符合条件的所以数据
    db.user.remove({'username':'lance'},{justOne:1})#只删除一条数据
    
    部分测试代码

    MongoDB的PHP扩展和使用方法

    GitHut源地址:https://github.com/mongodb/mongo-php-driver
    可以用prec方式安装,或者编译安装扩展生成mongo.so。
    修改php.ini文件,在php.ini文件中添加mongo配置,配置如下:

    extension=mongo.so

    php连接mongodb

    // 连接默认主机和端口为:mongodb://localhost:27017
    $m = new MongoClient(); 
    // 获取名称为 "test" 的数据库,不存在自动创建
    $db = $m->test; 
    

    创建集合collection

    $collection = $db->createCollection("runoob");
    

    插入数据

    // 选择集合
    $collection = $db->runoob;
    $document = array(  "title" => "MongoDB", "description" => "database");
    $collection->insert($document);
    

    查询数据

    //count()获取条数,findOne()获取单条数据。sort排序。其中 1 为升序排列,而-1是用于降序排列,参数的先后影响排序顺
    $collection->find()->sort(array('code'=>1,'money'=>-1));
    $collection->find()->fields(array("title"=>false));    //不显示title
    $collection->find()->fields(array("title"=>true));     //只显示title列    
    $collection->find()->limit(1)->skip(1);//跳过 1 条记录,取出 1条  
    $collection->find(array("money" => array('$in'=>array(20,30,90)))); //in查询
    

    模糊查询

    $param = array("title" => new MongoRegex('/db/'));    //like '%str%' 糊查询集合中的数据 ,正则^$
    $result = $collection->find($param);  
    

    更新数据

    // 更新文档
    $collection->update(array("title"=>"MongoDB"),array('$set'=>array("title"=>"MongoDB 教程")));
    

    删除数据

    $collection->remove(array("title"=>"MongoDB 教程"), array("justOne" => true))
    

    MongoDB的常用工具

    可视化工具:MongoChef

    MongoChef管理界面

    参考资料

    相关文章

      网友评论

          本文标题:mogodb学习报告(一)

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