zoukankan      html  css  js  c++  java
  • mongodb的安装和sql操作

    mongodb安装
    环境:centos6.5
    https://www.mongodb.org/dl/linux/x86_64
    wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.4.tgz


    1    安装mongodb
    cd /usr/local/src
    tar -xf mongodb-linux-x86_64-rhel62-3.4.4
    mv mongodb-linux-x86_64-rhel62-3.4.4 /usr/local/mongodb    改名到/usr/local下名为mongodb
    cd /usr/local/mongodb        mongodb主目录
    mkdir /usr/local/mongodb/data    数据目录
    mkdir /usr/local/mongodb/log    日志目录

    2    启动mongodb
    使用mongodb命令建立一个数据库链接,端口设置10001
    数据库路径:/usr/local/mogodb/data
    日志路径:/usr/local/mogodb/log/mogodb.log
    启动程序放在后台,下面命令执行后按ctrl+c
    nohup /usr/local/mogodb/bin/mogod --dbpath=/usr/local/mogodb/data --logpath=/usr/local/mongodb/log/mongl.log &
    mongodb默认端口是27017

    ps -ef | grep mongodb
    root     14858 14518  1 15:01 pts/1    00:00:01 /usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data/ --logpath=/usr/local/mongodb/log/mongo.log
    root     14887 14518  0 15:02 pts/1    00:00:00 grep mongodb
    nestat -ltpun | grep 14858
    tcp        0      0 0.0.0.0:27017               0.0.0.0:*                   LISTEN      14858/mongod
    lsof -i:27017
    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    mongod  14858 root    7u  IPv4 145311      0t0  TCP *:27017 (LISTEN)

    3    设置环境变量
    vim /etc/profile
    export PATH=$PATH:/usr/local/mongodb/bin/
    source /etc/profile

    4    写shell脚本放到server中,参数写到配置文件中,方便启动和关闭mongodb
    cat /usr/local/mongodb/mongodb.conf
    port=27017
    dbpath=/usr/local/mongodb/data
    logpath=/usr/local/mogodb/log/mongo.log
    logappend=true

    5 编写启动脚本
    vim /etc/init.d/mongodb
    chmod 755 /etc/init.d/mongodb
    /etc/init.d/mongodb status
    /etc/init.d/mongodb stop
    /etc/init.d/mongodb start
    lsof -i:27017

    #!/bin/bash
    #
    # mongod        Start up the MongoDB server daemon
    #
    # source function library
    . /etc/rc.d/init.d/functions
    #定义命令
    CMD=/usr/local/mongodb/bin/mongod
    #定义配置文件路径
    INITFILE=/usr/local/mongodb/mongodb.conf
    start()
    {
        #&表示后台启动,也可以使用fork参数
        $CMD -f $INITFILE &
        echo "MongoDB is running background..."
    }
       
    stop()
    {
        pkill mongod
        echo "MongoDB is stopped."
    }
       
    case "$1" in
        start)
            start
            ;;
        stop)
            stop
            ;;
        *)
            echo $"Usage: $0 {start|stop}"
    esac

    5    通过shell连接mongodb
    # 在客户机上连接本机mongodb:mongo 192.168.133.143:27017
    #mongo
    2017-06-03T15:17:55.700+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
    2017-06-03T15:17:55.700+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
    2017-06-03T15:17:55.700+0800 I CONTROL  [initandlisten]
    2017-06-03T15:17:55.700+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
    2017-06-03T15:17:55.700+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
    >help        help可以查看他的参数

    mongodb非正常关闭,导致启动失败的问题
    关闭后再次重启后发现报错信息:
    #/usr/local/mongodb/bin/mongod --logpath
    /usr/local/mongodb/log/system.log --logappend --dbpath /data/mongodb --directoryperdb
     --auth --journal --profile=1 --slowms=5 --fork
    forked process:4853
    all output going to:/usr/local/mongodb/log/system.log
    查看日志:
    其中有句话:j._34:can't find its prececding file
                journal dir=/data/mongodb/journal
                dbexit:really exiting now
    这是由于mongodb非正常关闭导致的
    解决办法:
    rm -rf /data/mongodb/mongod.lock
    /usr/local/mongodb/bin/mongod --logpath --dpath /data/mongodb --repair
    rm -rf /data/mongodb/journal/*j._4
    启动mongodb:/usr/local/mongodb/bin/mongod --logpath --dbpath /data/mongodb
    --directoryperdb --auth --journal --profile=1 --slowms=5 --fork &
    正确关闭:
    >use admin
    >db.shutdownServer()
    或者killall mongod




    yum安装mongodb
    1    创建repo
    vim /etc/yum.repo.d/mongo-org.repo
    [mongodb-org-3.2]
    name=MongoDB Repository
    baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/
    gpgcheck=0
    enabled=1

    2    安装mongodb和相关工具
    yum -y install mongodb-org
    service mongod start
    chkconfig mongod on
    lsof -i:27017
    日志文件:/var/log/mongodb/mongodb.log
    配置文件:/etc/mongod.conf
    数据目录:/var/lib/mongo

    3    数据文件解释:
     cat /etc/mongod.conf
    # mongo.conf        
    #where to log    
    logpath=/var/log/mongo/mongod.log    
    logappend=true #以追加方式写入日志    
    # fork and run in background    
    fork = true        
    #port = 27017 #端口         
    dbpath=/var/lib/mongo #数据库文件保存位置    
    directoryperdb=true
    # Enables periodic logging of CPU utilization and I/O wait    
    #启用定期记录CPU利用率和 I/O 等待    
    #cpu = true   
         # Turn on/off security.  Off is currently the default   
    # 是否以安全认证方式运行,默认是不认证的非安全方式    
    #noauth = true   
    #auth = true   
    # Verbose logging output.    
    # 详细记录输出    
    #verbose = true   
    # Inspect all client data for validity on receipt (useful for   
    # developing drivers)用于开发驱动程序时的检查客户端接收数据的有效性    
    #objcheck = true        
    # Enable db quota management 启用数据库配额管理,默认每个db可以有8个文件,可以用quotaFiles参数设置    
    #quota = true   
    # 设置oplog记录等级    
    # Set oplogging level where n is    
    #   0=off (default)    
    #   1=W    
    #   2=R    
    #   3=both    
    #   7=W+some reads    
    #oplog = 0   
    # Diagnostic/debugging option 动态调试项    
    #nocursors = true        
    # Ignore query hints 忽略查询提示    
    #nohints = true   
    # 禁用http界面,默认为localhost:28017   
    # Disable the HTTP interface (Defaults to localhost:27018).这个端口号写的是错的    
    #nohttpinterface = true        
    # 关闭服务器端脚本,这将极大的限制功能    
    # Turns off server-side scripting.  This will result in greatly limited    
    # functionality    
    #noscripting = true   
    # 关闭扫描表,任何查询将会是扫描失败    
    # Turns off table scans.  Any query that would do a table scan fails.    
    #notablescan = true   
    # 关闭数据文件预分配    
    # Disable data file preallocation.    
    #noprealloc = true   
    # 为新数据库指定.ns文件的大小,单位:MB    
    # Specify .ns file size for new databases.    
    # nssize = <size>    
    # Accout token for Mongo monitoring server.    
    #mms-token = <token>    
    # mongo监控服务器的名称    
    # Server name for Mongo monitoring server.    
    #mms-name = <server-name>    
    # mongo监控服务器的ping 间隔    
    # Ping interval for Mongo monitoring server.    
    #mms-interval = <seconds>    
    # Replication Options 复制选项    
    # in replicated mongo databases, specify here whether this is a slave or master 在复制中,指定当前是从属关系    
    #slave = true   
    #source = master.example.com    
    # Slave only: specify a single database to replicate    
    #only = master.example.com    
    # or    
    #master = true   
    #source = slave.example.com   

    日常操作命令:
    1)登录和退出
    默认bind绑定的ip是127.0.0.1以及端口27017
    mongo
    mongo 127.0.0.1:27.17
    绑定固定ip,比如bind_ip=168.133.142.11
    mongo 168.133.142.11:27017
    连接某个库
    mongo ip:port/库名 -u用户名 -p密码
    >show collections
    mongodb会自动连接一个名为test的库,如果该库不存在,自动创建

    关于命令的操作
    >show dbs
    查看服务器上的数据库

    >use syp;
    mongo中,db代表当前使用的数据库,db从test变成syp,如果没有syp,就会创建
    并且不插入数据的话,该库也创建不了。

    >show collections
    查看当前数据库的集合

    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    创建数据库
    >use syp;
    >show dbs;
    >db.syp.insert({"name":"testdb"})
    >show dbs

    删除数据库
    >db.dropDatase()
    >show dbs

    查看当前数据库
    >db
    >db.getName();

    当删除数据test后,当前的db还是指向它,只有当切换数据库后,xxx才能消失。
    >use test1
    >db
    >show dbs

    修复当前库
    >db.repairDatabase();

    查看当前数据库状态
    >db.stats();
    当前db版本
    >db.version();
    查看当前db的链接机器地址
    >db.getMongo();
    从指定主机上克隆数据库
    db.cloneDatabase("192.168.133.143");

    从指定的机器上复制指定数据库数据到某个数据库
    将本机的master_slave数据复制到wangshibo数据库中
    >db.copyDatabases("master_slave","wangshibo","127.0.0.1");

    collection操作

    新建collection
    >db.createCollection("hello")
    >show collections

    直接向一个不存在的collection中插入数据也能创建一个collection
    >db.hello2.insert({"name":"lfqy"})
    >show collections

    删除collection
    >db.Hello.drop()
    ture    返回true说明删除成功,返回false说明删除失败

    重命名collection
    >show clooections
    >db.hello2.renameCollection("Hello")
    >show collections

    建立索引在HELLO集合上,建立对ID字段的索引,1代表升序
    >db.HELLO.ensureIndex({ID:1})



    Record级别的操作

    插入操作:
    向user集合中插入两条记录:
    >db.user.insert({'name':'GalGadot','gender':'female','age':28,'salary':11000})
    >db.user.insert({'name':'Mike','gender':'female','age':28,'salary':1000})
    用save完成类似的插入操作
    >db.user.save({'name':'jim','gender':'male','age':32,'salary':8000})

    查找操作
    查找集合中的所有记录
    >db.user.find()
    查找集合中符合条件的记录
    (1)单一条件
    查询age为26的数据
    >db.user.find({"age":26})
    查询salary大于7000的数据
    >db.user.find({salary:{$gt:7000}})
    查询name中包含‘ent’的数据
    >db.user.find({name:/ent/})
    查询name中以G开头的数据
    >db.user.find({name:/^G/})
    查询name中以G结尾的数据
    >db.user.find({name:/$G/})

     (2)多条件“与”
    查询age小于30,salary大于7000的数据
    >db.user.find({age:{$1t:30},salary:{$gt:7000}})

     (3)多条件“或”
    查询age小于30,或者salary大于1000的记录
    >db.user.find({$or:[{salary:{$gt:1000}},{age:{$1t:30}}]})

     (4)查询第一条记录
     将上面的find替换成findOne
     
     (5)查询user集合中的name,age,salary字段
    >db.user.find({},{name:1,age:1,salary:true})
        1表示显示此列的意思,也可以用true表示
    >db.user.find({},{name:1,age:true,salary:1})    
     
     (6)查询指定字段的数据,并去掉重复数据
    >db.user.distinct('gender')

    对查询结果集的操作
    提供了pretty print工具,db.collection.pretty()或者db.collection.forEach(printjson)
    >db.user.find().pretty()

    指定结果集显示的条目
    显示结果集中的前3条记录
    >db.user.find().limit(3)
    查询第一条以后的所有数据
    >db.user.find().skip(1)
    查询跳过前两条以后的数据
    >db.user.find().skip(2)
    对结果集升序
    >db.user.find().sort({salary:1})
    降序
    >db.user.find().sort({salary:-1})

    统计集合中所有的记录条数
    >db.user.find().count()
    查询符合条件的记录数
    查询salary大于4000或者大于10000的记录数
    >db.user.find({$or:[{$lt:4000}},{salary:{$gt:10000}}}]}).count()

    ###################################################
    删除操作

    删除整个集合中的所有数据
    >db.wangshibo.find()
    >db.wangshibo.remove({})
    >db.wangshibo.find()
    remove()函数接受一个查询文档作为可选参数来有选择性的删除符合条件的文档
    不会删除集合本身,原有的索引页不会被删除。
    删除文档是永久的,不能撤销,也不能恢复。
    drop()是把集合相关的信息整个删除(包括索引)

    删除集合中符合条件的所有记录
    >db.user.find()
    >db.user.remove({name:'GalGadot'})
    >db.user.find()
    删除集合中符合条件的一条记录
    >db.user.find()
    >db.user.remove({salary :{$1t:30000},1})
    >db.user.find()
    也可以将命令逗号后的1改成true

    更新操作:
    赋值更新:db.collection.update(criteria,objNew,upsert,multi)
    criteria:update的查询条件,类似sql update查询内where后面的
    objNew:update的对象和一些更新的操作符如$,$inc...等,可以理解为sql update查询内set后面的
    upsert:如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入
    multi:mongodb默认是false,只更新找到的第一条记录,如何参数是true,
    就把条件查出来多条记录全部更新
    >db.user.find()
    >db.user.update({name:'huihui'},{$set:{age:23}},false,true)
    >db.user.find()
    >db.user.update({name:'lfqy1'},{$set:{age:23}},true,true)
    >db.user.find()

    增值操作
    >db.user.find()
    >db.user.updata({gender:'female'},{$inc:{salary:50}},false,true)
    >db.user.find()





  • 相关阅读:
    Java垃圾回收机制
    Java学习笔记——反射
    GitHub中有关已建仓库及上传项目文件的删除
    LaTex简历排版
    JavaSwing输入对话框,点击取消抛出异常的解决方法
    map的遍历方式(使用Junit测试)
    eclipse faild to creat the java Virtual Machine的解决办法
    XML消息解析_php
    [转载]android常用的API接口调用
    算法练习之:Doubles
  • 原文地址:https://www.cnblogs.com/fengzhongzhuzu/p/8670059.html
Copyright © 2011-2022 走看看