文档章节

MongoDB

胡子叭槎
 胡子叭槎
发布于 2017/04/15 22:39
字数 3298
阅读 129
收藏 2

mongodb :基于文档存储的数据库。

可以放一些轻量级的文档,或者小图片。也可以存储大文件,比如视频。

高性能

高可用

自动分片,分散存储

   集合(类似于表)

          文档(类似于行)

  1. mongodb的安装
    可以按照一般yum的按照方法进行安装。
    1.1 配置yum 源
    [root@dgstandby ~]# cat /etc/yum.repos.d/iso.repo 
    [mongodb]
    name=mongodb
    baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64
    gpgcheck=0
    enabled=1
    

    1.2 安装 yum install mongodb-org -y
    1.3 rpm 安装
        先下载好mongodb 然后安装

    [root@dgstandby ~]# ll /opt/mongodb/
    total 112016
    -rw-r--r--. 1 root root     4729 Apr 15 22:15 mongodb-org-2.6.4-1.x86_64.rpm
    -rw-r--r--. 1 root root  7173388 Apr 15 22:15 mongodb-org-mongos-2.6.4-1.x86_64.rpm
    -rw-r--r--. 1 root root  9440807 Apr 15 22:15 mongodb-org-server-2.6.4-1.x86_64.rpm
    -rw-r--r--. 1 root root  4458983 Apr 15 22:15 mongodb-org-shell-2.6.4-1.x86_64.rpm
    -rw-r--r--. 1 root root 93614639 Apr 15 22:15 mongodb-org-tools-2.6.4-1.x86_64.rpm
    
    [root@dgstandby ~]# rpm -ivh /opt/mongodb/*
    Preparing...                ########################################### [100%]
       1:mongodb-org-tools      ########################################### [ 20%]
       2:mongodb-org-shell      ########################################### [ 40%]
       3:mongodb-org-server     ########################################### [ 60%]
       4:mongodb-org-mongos     ########################################### [ 80%]
       5:mongodb-org            ########################################### [100%]
    

    mongodb-org-2.6 这个是一个空的,只是基于下面软件安装的一个依赖
    mongodb-org-server 服务端
    mongodb-org-shell 客户端
    mongodb-org-tools 工具包,里面包含 备份,回复,迁移,等工具
    mongodb-org-mongos 这个里面包含分片用的工具
    这些都全部安装

    [root@dgstandby ~]# rpm -ivh /opt/mongodb/*
    Preparing...                ########################################### [100%]
       1:mongodb-org-tools      ########################################### [ 20%]
       2:mongodb-org-shell      ########################################### [ 40%]
       3:mongodb-org-server     ########################################### [ 60%]
       4:mongodb-org-mongos     ########################################### [ 80%]
       5:mongodb-org            ########################################### [100%]
    

    查看安装的情况
    [root@dgstandby ~]# rpm -ql mongodb-org-tools
    /usr/bin/bsondump
    /usr/bin/mongodump
    /usr/bin/mongoexport
    /usr/bin/mongofiles
    /usr/bin/mongoimport
    /usr/bin/mongooplog
    /usr/bin/mongoperf
    /usr/bin/mongorestore
    /usr/bin/mongostat
    /usr/bin/mongotop
    /usr/share/man/man1/bsondump.1
    /usr/share/man/man1/mongodump.1
    /usr/share/man/man1/mongoexport.1
    /usr/share/man/man1/mongofiles.1
    /usr/share/man/man1/mongoimport.1
    /usr/share/man/man1/mongooplog.1
    /usr/share/man/man1/mongoperf.1
    /usr/share/man/man1/mongorestore.1
    /usr/share/man/man1/mongostat.1
    /usr/share/man/man1/mongotop.1
    # 其他的工具包类似

     

  2. mongodb 配置
    [root@dgstandby ~]# cat /etc/mongod.conf 
    # mongod.conf
    
    #where to log
    logpath=/var/log/mongodb/mongod.log # 指定日志文件路径
    
    logappend=true #是否追加
    
    # fork and run in background
    fork=true#是否后台运行
    
    #port=27017
    
    dbpath=/var/lib/mongo#数据文件存放路径
    
    # location of pidfile
    pidfilepath=/var/run/mongodb/mongod.pid #进程文件路径
    
    # Listen to local interface only. Comment out to listen on all interfaces. 
    bind_ip=127.0.0.1
    
    # Disables write-ahead journaling
    # nojournal=true
    
    # Enables periodic logging of CPU utilization and I/O wait
    #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
    #quota=true#是否磁盘配额
    
    # Set oplogging level where n is
    #   0=off (default)
    #   1=W
    #   2=R
    #   3=both
    #   7=W+some reads
    #diaglog=0
    
    # Ignore query hints
    #nohints=true
    
    # Enable the HTTP interface (Defaults to port 28017).
    #httpinterface=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
    
    # Specify .ns file size for new databases.
    # nssize=<size>
    
    # Replication Options
    
    # in replicated mongo databases, specify the replica set name here
    #replSet=setname
    # maximum size in megabytes for replication operation log
    #oplogSize=1024
    # path to a key file storing authentication info for connections
    # between replica set members
    #keyFile=/path/to/keyfile
    
  3. 登陆
    先启动

    [root@dgstandby ~]# /etc/init.d/mongod start
    Starting mongod: /usr/bin/dirname: extra operand `2>&1.pid'
    Try `/usr/bin/dirname --help' for more information.
                                                               [  OK  ]
    

    登陆

    [root@dgstandby ~]# mongo
    MongoDB shell version: 2.6.4
    connecting to: test
    Welcome to the MongoDB shell.
    For interactive help, type "help".
    For more comprehensive documentation, see
    	http://docs.mongodb.org/
    Questions? Try the support group
    	http://groups.google.com/group/mongodb-user
    > 
    

    查看数据库

    > show dbs
    admin  (empty)
    local  0.078GB
    

    进入库

    > use admin
    switched to db admin

    查看有哪些集合(有哪些表)

    > use local;
    switched to db local
    > show collections;
    startup_log
    system.indexes
    

    查看集合中的文档(查表中的行)

    system.indexes
    > db.local.find()
    > db.local.find();
    # 这里用db.集合名.find()来查看,当前着里面啥也没有
  4. CRUD 增删改查
    4.1 mongodb 新建:
    不需要单独新建库,因为mongodb可以切换到不存在的库,只要在不存在的库里面插入集合数据,库就自动建起来了。
    > show dbs
    admin  (empty)
    local  0.078GB
    > use wzl
    switched to db wzl
    

    库wzl不存在,但是也可以切换过去,再在里面插入集合数据

    > db.test_coll.insert({"name":"www","age":18})
    WriteResult({ "nInserted" : 1 })
    #在不存在的库wzl里面的集合test_coll 里面插入了一个文档,这个文档里面有两个键值对
    > show dbs
    admin  (empty)
    local  0.078GB
    wzl    0.078GB
    # 库wzl就自动建立了
    > show collections
    system.indexes
    test_coll
    #库里面的集合也自动建立起来了

    所以说mongodb里面的库,集合不用单独建立,只要在想要的库下想要的集合里面插入文档数据库和集合就建立起来了。
    4.2 查询
        db.集合名称.find()

    > db.test_coll.find()
    { "_id" : ObjectId("58f2cea01bdbed15ec87f159"), "name" : "www", "age" : 18 }
    { "_id" : ObjectId("58f2cf8a1bdbed15ec87f15a"), "name" : "httpd", "age" : 32 }
    > db.test_coll.findOne()
    { "_id" : ObjectId("58f2cea01bdbed15ec87f159"), "name" : "www", "age" : 18 }
    
    

    4.3 删除
        db.集合名称.remove()

    > db.test_coll.remove({"name":"www"})
    WriteResult({ "nRemoved" : 1 })
    > db.test_coll.find()
    { "_id" : ObjectId("58f2cf8a1bdbed15ec87f15a"), "name" : "httpd", "age" : 32 }

    4.4 drop
    db.集合名称.drop()

    > db.test_coll.drop()
    true
    > show collections;
    system.indexes
    

    4.5 更新操作
    更新值,增加列,删除列 都用update
    更新值:db.集合名字.update({条件键值对},{$set{修改值键值对}})

    > db.coll.find()
    { "_id" : ObjectId("58f2dee54e725edce10ebafe"), "name" : "wzl", "age" : 30, "sal" : 1000 }
    { "_id" : ObjectId("58f2df454e725edce10ebaff"), "name" : "hyl", "age" : 20, "sal" : 4000 }
    #下面进行修改
    > db.coll.find()
    { "_id" : ObjectId("58f2dee54e725edce10ebafe"), "name" : "wzl", "age" : 30, "sal" : 4000 }
    { "_id" : ObjectId("58f2df454e725edce10ebaff"), "name" : "hyl", "age" : 20, "sal" : 4000 }

    如果要增加一个列如下:

     db.coll.update({name:"wzl"},{$set:{tail:"22222222"}})
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    > db.coll.find()
    { "_id" : ObjectId("58f2dee54e725edce10ebafe"), "name" : "wzl", "age" : 30, "sal" : 4000, "tail" : "22222222" }
    { "_id" : ObjectId("58f2df454e725edce10ebaff"), "name" : "hyl", "age" : 20, "sal" : 4000 }
    { "_id" : ObjectId("58f2e0de4e725edce10ebb00"), "name" : "www", "age" : 20, "sal" : 4000, "tell" : "1330110765898" }
    # 更新语句中找不到要修改的字段,则自动添加这个字段
    如果条件找不到行,后面添加true 可以自动添加一个行
    > db.coll.update({name:"http"},{$set:{mail:"111111@qq.com"}},true)
    WriteResult({
    	"nMatched" : 0,
    	"nUpserted" : 1,
    	"nModified" : 0,
    	"_id" : ObjectId("58f2e24fe63aa403cd19044a")
    })
    > db.coll.find()
    { "_id" : ObjectId("58f2dee54e725edce10ebafe"), "name" : "wzl", "age" : 30, "sal" : 4000, "tail" : "22222222" }
    { "_id" : ObjectId("58f2df454e725edce10ebaff"), "name" : "hyl", "age" : 20, "sal" : 4000 }
    { "_id" : ObjectId("58f2e0de4e725edce10ebb00"), "name" : "www", "age" : 20, "sal" : 4000, "tell" : "1330110765898" }
    { "_id" : ObjectId("58f2e24fe63aa403cd19044a"), "name" : "http", "mail" : "111111@qq.com" }
    # 找不到条件对应的文档,在后面加一个true 表示如果找不到修改的文档,则自动添加一个文档(行),添加的是条件列和修改值的列

    多行更新
    > db.coll.update({age:20},{$set:{sal:5000}})
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    > db.coll.find()
    { "_id" : ObjectId("58f2dee54e725edce10ebafe"), "name" : "wzl", "age" : 30, "sal" : 4000, "tail" : "22222222" }
    { "_id" : ObjectId("58f2df454e725edce10ebaff"), "name" : "hyl", "age" : 20, "sal" : 5000 }
    { "_id" : ObjectId("58f2e0de4e725edce10ebb00"), "name" : "www", "age" : 20, "sal" : 4000, "tell" : "1330110765898" }
    { "_id" : ObjectId("58f2e24fe63aa403cd19044a"), "name" : "http", "mail" : "111111@qq.com" }
    #这样的更新只更新第一条
    >  db.coll.update({age:20},{$set:{sal:6000}},false,true)
    WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })
    > db.coll.find()
    { "_id" : ObjectId("58f2dee54e725edce10ebafe"), "name" : "wzl", "age" : 30, "sal" : 4000, "tail" : "22222222" }
    { "_id" : ObjectId("58f2df454e725edce10ebaff"), "name" : "hyl", "age" : 20, "sal" : 6000 }
    { "_id" : ObjectId("58f2e0de4e725edce10ebb00"), "name" : "www", "age" : 20, "sal" : 6000, "tell" : "1330110765898" }
    { "_id" : ObjectId("58f2e24fe63aa403cd19044a"), "name" : "http", "mail" : "111111@qq.com" }
    # 后面第二个参数true 可以设置多行更新

    递增递减

    > db.coll.update({age:20},{$inc:{sal:+500}})
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    > db.coll.find()
    { "_id" : ObjectId("58f2dee54e725edce10ebafe"), "name" : "wzl", "age" : 30, "sal" : 4000, "tail" : "22222222" }
    { "_id" : ObjectId("58f2df454e725edce10ebaff"), "name" : "hyl", "age" : 20, "sal" : 6500 }
    { "_id" : ObjectId("58f2e0de4e725edce10ebb00"), "name" : "www", "age" : 20, "sal" : 6000, "tell" : "1330110765898" }
    { "_id" : ObjectId("58f2e24fe63aa403cd19044a"), "name" : "http", "mail" : "111111@qq.com" }
    # $inc 表示递增递减
    > db.coll.update({age:20},{$inc:{sal:+500}},false,true)
    WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })
    > db.coll.find()
    { "_id" : ObjectId("58f2dee54e725edce10ebafe"), "name" : "wzl", "age" : 30, "sal" : 4000, "tail" : "22222222" }
    { "_id" : ObjectId("58f2df454e725edce10ebaff"), "name" : "hyl", "age" : 20, "sal" : 7000 }
    { "_id" : ObjectId("58f2e0de4e725edce10ebb00"), "name" : "www", "age" : 20, "sal" : 6500, "tell" : "1330110765898" }
    { "_id" : ObjectId("58f2e24fe63aa403cd19044a"), "name" : "http", "mail" : "111111@qq.com" }
    # 后面第二个true 表示全部递增递减
    

    删除列
    > db.coll.find()
    { "_id" : ObjectId("58f2dee54e725edce10ebafe"), "name" : "wzl", "age" : 30, "sal" : 4000, "tail" : "22222222" }
    { "_id" : ObjectId("58f2df454e725edce10ebaff"), "name" : "hyl", "age" : 20, "sal" : 7000 }
    { "_id" : ObjectId("58f2e0de4e725edce10ebb00"), "name" : "www", "age" : 20, "sal" : 6500, "tell" : "1330110765898" }
    { "_id" : ObjectId("58f2e24fe63aa403cd19044a"), "name" : "http", "mail" : "111111@qq.com" }
    > db.coll.update({age:20},{$unset:{sal:$lt:8000}},false,true)
    2017-04-16T11:34:59.962+0800 SyntaxError: Unexpected token :
    > db.coll.update({age:20},{$unset:{sal:{$gt:5000}}},false,true)
    WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })
    > db.coll.find()
    { "_id" : ObjectId("58f2dee54e725edce10ebafe"), "name" : "wzl", "age" : 30, "sal" : 4000, "tail" : "22222222" }
    { "_id" : ObjectId("58f2df454e725edce10ebaff"), "name" : "hyl", "age" : 20 }
    { "_id" : ObjectId("58f2e0de4e725edce10ebb00"), "name" : "www", "age" : 20, "tell" : "1330110765898" }
    { "_id" : ObjectId("58f2e24fe63aa403cd19044a"), "name" : "http", "mail" : "111111@qq.com" }
    # 操作符$unset 表示删除列
    # 对要操作的值的键值对中的值可以加上比较操作符$gt 大于 $lt 小于等等,且后面第二个参数谢true 可以批量操作,否则值操作第一行。

    条件查询,且只查指定字段:

    > db.coll.find({},{_id:0,name:1,age:1})
    { "name" : "wzl", "age" : 30 }
    { "name" : "hyl", "age" : 20 }
    { "name" : "www", "age" : 20 }
    { "name" : "http" }
    # 前面的空{} 表示后面可以指定对应的显示字段。显示字段前面_id:0 表示不显示id
    > db.coll.find({},{sal:0})
    { "_id" : ObjectId("58f2dee54e725edce10ebafe"), "name" : "wzl", "age" : 30, "tail" : "22222222" }
    { "_id" : ObjectId("58f2df454e725edce10ebaff"), "name" : "hyl", "age" : 20 }
    { "_id" : ObjectId("58f2e0de4e725edce10ebb00"), "name" : "www", "age" : 20, "tell" : "1330110765898" }
    { "_id" : ObjectId("58f2e24fe63aa403cd19044a"), "name" : "http", "mail" : "111111@qq.com" }
    

    我们可以看出来了,查询语句里面列名后面:1表示取,:0表示不取这个

    去重显示

    > db.coll.distinct('age')
    [ 30, 20 ]

    显示指定前N行
    > db.coll.find().limit(3)
    { "_id" : ObjectId("58f2dee54e725edce10ebafe"), "name" : "wzl", "age" : 30, "sal" : 4000, "tail" : "22222222" }
    { "_id" : ObjectId("58f2df454e725edce10ebaff"), "name" : "hyl", "age" : 20 }
    { "_id" : ObjectId("58f2e0de4e725edce10ebb00"), "name" : "www", "age" : 20, "tell" : "1330110765898" }
    
    跳跃显示
    > db.coll.find().limit(2).skip(1);
    { "_id" : ObjectId("58f2df454e725edce10ebaff"), "name" : "hyl", "age" : 20 }
    { "_id" : ObjectId("58f2e0de4e725edce10ebb00"), "name" : "www", "age" : 20, "tell" : "1330110765898" }
    #先跳跃,再取数
    大于:$gt
    大于等于$gte
    小于:$lt
    小于等于:$lte
    不等于:$ne
    多个值:$in:[]
    $all 同时满足
    $or 或者满足一个就好
    $mod 除以取余
     
    > db.coll.find({age:{$in:[20,30]}})
    { "_id" : ObjectId("58f2dee54e725edce10ebafe"), "name" : "wzl", "age" : 30, "sal" : 4000, "tail" : "22222222" }
    { "_id" : ObjectId("58f2df454e725edce10ebaff"), "name" : "hyl", "age" : 20 }
    { "_id" : ObjectId("58f2e0de4e725edce10ebb00"), "name" : "www", "age" : 20, "tell" : "1330110765898" }
    # in 的使用
    > db.coll.find({age:{$nin:[20,30]}},{name:1,age:1,_id:0})
    { "name" : "http" }
    { "name" : "abc", "age" : 65 }
    { "name" : "ftp", "age" : 65 }
    # nin的用法
    > db.coll.find({age:{$in:[20,30,65]},sal:{$lte:8000}},{name:1,age:1,_id:0,sal:1})
    { "name" : "wzl", "age" : 30, "sal" : 4000 }
    { "name" : "abc", "age" : 65, "sal" : 4000 }
    # 多个条件,指定显示字段的用法
    > db.coll.find({sal:{$lte:8000,$gte:2000}},{name:1,age:1,_id:0,sal:1})
    { "name" : "wzl", "age" : 30, "sal" : 4000 }
    { "name" : "abc", "age" : 65, "sal" : 4000 }
    # 相当于额between and 的用法
    > db.coll.find({age:{$mod:[3,0]}})
    { "_id" : ObjectId("58f2dee54e725edce10ebafe"), "name" : "wzl", "age" : 30, "sal" : 4000, "tail" : "22222222" }
    #表示找age除以3 余数为0的
    > db.coll.find({age:{$not:{$mod:[3,0]}}})
    { "_id" : ObjectId("58f2df454e725edce10ebaff"), "name" : "hyl", "age" : 20 }
    { "_id" : ObjectId("58f2e0de4e725edce10ebb00"), "name" : "www", "age" : 20, "tell" : "1330110765898" }
    { "_id" : ObjectId("58f2e24fe63aa403cd19044a"), "name" : "http", "mail" : "111111@qq.com" }
    { "_id" : ObjectId("58f2eda14e725edce10ebb01"), "name" : "abc", "age" : 65, "sal" : 4000 }
    { "_id" : ObjectId("58f2edb64e725edce10ebb02"), "name" : "ftp", "age" : 65, "sal" : 10000 }
    #余数取反

    4.6 排序sort()
    > db.coll.find({},{_id:0,sal:1}).sort({sal:1})
    {  }
    {  }
    {  }
    { "sal" : 4000 }
    { "sal" : 4000 }
    { "sal" : 10000 }
    # sort() 1 升序,-1 降序
    > db.coll.find({},{_id:0,sal:1}).sort({sal:-1})
    { "sal" : 10000 }
    { "sal" : 4000 }
    { "sal" : 4000 }
    {  }
    {  }
    {  }
    
    4.7 聚合
        求和,分组,求平均等
    > db.coll.aggregate({$group:{_id:"",sumsalccc:{$sum:"$sal"}}})
    { "_id" : "", "sumsalccc" : 18000 }
    #求和,相当于额oracle中的sum
    > db.coll.aggregate({$group:{_id:"",maxsal:{$max:"$sal"}}})
    { "_id" : "", "maxsal" : 10000 }
    #求最大值
    > db.coll.aggregate({$group:{_id:"",minsal:{$min:"$sal"}}})
    { "_id" : "", "minsal" : 4000 }
    #求最小值
    > db.coll.aggregate({$group:{_id:"",avgsal:{$avg:"$sal"}}})
    { "_id" : "", "avgsal" : 6000 }
    #求平均值
    > db.coll.aggregate({$group:{_id:{age:"$age"},avgsal:{$avg:"$sal"}}})
    { "_id" : { "age" : 65 }, "avgsal" : 7000 }
    { "_id" : { "age" : null }, "avgsal" : 0 }
    { "_id" : { "age" : 20 }, "avgsal" : 0 }
    { "_id" : { "age" : 30 }, "avgsal" : 4000 }
    # group 分组求平均
    # 上面求最大最小,就是group 里面指定的条件_id:"" 条件是空的,就是全表求最大最小,把里面加上条件就是分组求最大最小
    
    > db.coll.aggregate({$group:{_id:{agecccccc:"$age"},avgsal:{$avg:"$sal"}}})
    { "_id" : { "agecccccc" : 65 }, "avgsal" : 7000 }
    { "_id" : { "agecccccc" : null }, "avgsal" : 0 }
    { "_id" : { "agecccccc" : 20 }, "avgsal" : 0 }
    { "_id" : { "agecccccc" : 30 }, "avgsal" : 4000 }
    # 同个例子可以看出后面$后面的名称是表中真实的名字,前面的名字是自定义的,相当于额oracle里面的别名
    > db.coll.aggregate({$group:{_id:{agecccccc:"$age"},sumsumsum:{$sum:"$sal"}}},{$match:{sumsumsum:{$gt:4000}}})
    { "_id" : { "agecccccc" : 65 }, "sumsumsum" : 14000 }
    # 在group 后面再进行过滤,相当于额oracle 里面的having
  5. 索引
    5.1 查看索引
    db.集合名称.getIndexes()

    > db.coll.getIndexes();
    [
    	{
    		"v" : 1,
    		"key" : {
    			"_id" : 1
    		},
    		"name" : "_id_",
    		"ns" : "wzl.coll"
    	}
    ]
    # 索引_id_ 是系统自动添加的,类似与oracle里面rowid 一样。索引在库wzl,集合coll的_id 上。1 表示升序索引

    5.2 创建索引
     

    > db.coll.ensureIndex({name:1})
    {
    	"createdCollectionAutomatically" : false,
    	"numIndexesBefore" : 1,
    	"numIndexesAfter" : 2,
    	"ok" : 1
    }
    # OK表示创建成功
    > db.coll.getIndexes();
    [
    	{
    		"v" : 1,
    		"key" : {
    			"_id" : 1
    		},
    		"name" : "_id_",
    		"ns" : "wzl.coll"
    	},
    	{
    		"v" : 1,
    		"key" : {
    			"name" : 1
    		},
    		"name" : "name_1",
    		"ns" : "wzl.coll"
    	}
    ]
    
    # 还可以建组合索引
    > db.coll.ensureIndex({name:1,age:1})
    {
    	"createdCollectionAutomatically" : false,
    	"numIndexesBefore" : 1,
    	"numIndexesAfter" : 2,
    	"ok" : 1
    }
    > db.coll.getIndexes()
    [
    	{
    		"v" : 1,
    		"key" : {
    			"_id" : 1
    		},
    		"name" : "_id_",
    		"ns" : "wzl.coll"
    	},
    	{
    		"v" : 1,
    		"key" : {
    			"name" : 1,
    			"age" : 1
    		},
    		"name" : "name_1_age_1",
    		"ns" : "wzl.coll"
    	}
    ]
    
    #话可以建唯一性索引
    > db.coll.ensureIndex({name:1},{unique:true})
    {
    	"createdCollectionAutomatically" : false,
    	"numIndexesBefore" : 1,
    	"numIndexesAfter" : 2,
    	"ok" : 1
    }
    > db.coll.getIndexes();
    [
    	{
    		"v" : 1,
    		"key" : {
    			"_id" : 1
    		},
    		"name" : "_id_",
    		"ns" : "wzl.coll"
    	},
    	{
    		"v" : 1,
    		"unique" : true,
    		"key" : {
    			"name" : 1
    		},
    		"name" : "name_1",
    		"ns" : "wzl.coll"
    	}
    ]
    

    5.3 删除索引

    > db.coll.dropIndex('name_1');
    { "nIndexesWas" : 2, "ok" : 1 }
    > db.coll.getIndexes();
    [
    	{
    		"v" : 1,
    		"key" : {
    			"_id" : 1
    		},
    		"name" : "_id_",
    		"ns" : "wzl.coll"
    	}
    ]
    #上面是删一个索引
    > db.coll.dropIndexes()
    {
    	"nIndexesWas" : 2,
    	"msg" : "non-_id indexes dropped for collection",
    	"ok" : 1
    }
    > db.coll.getIndexes()
    [
    	{
    		"v" : 1,
    		"key" : {
    			"_id" : 1
    		},
    		"name" : "_id_",
    		"ns" : "wzl.coll"
    	}
    ]
    # 这个是删所有索引

    5.4 查看索引的总大小

    > db.coll.totalIndexSize()
    16352
    # 字节数
  6. 管理
    6.1 创建用户密码
     

    > db.createUser({user:"scott",pwd:"tiger",roles:[{role:"userAdmin",db:"wzl"}]})
    Successfully added user: {
    	"user" : "scott",
    	"roles" : [
    		{
    			"role" : "userAdmin",
    			"db" : "wzl"
    		}
    	]
    }
    
    # 创建用户scott密码tiger 角色userAdmin 链接到库wzl
    > show users;
    {
    	"_id" : "test.scott",
    	"user" : "scott",
    	"db" : "test",
    	"roles" : [
    		{
    			"role" : "userAdmin",
    			"db" : "wzl"
    		}
    	]
    }
    
    

    用密码链接

    [root@dgstandby ~]# mongo wzl -u scott -p tiger
    MongoDB shell version: 2.6.4
    connecting to: wzl
    

    虽然创建了密码,但是本来密码也可以登陆的,这样还是不安全
    先关闭mongodb,
    打开配置文件/etc/mongd.conf
    里面auth=true

    [root@dgstandby ~]# cat /etc/mongod.conf |grep auth=
    #noauth=true
    auth=true
    

    启动mongodb

    [root@dgstandby ~]# mongo admin
    MongoDB shell version: 2.6.4
    connecting to: admin
    > show collections;
    2017-04-16T16:13:01.243+0800 error: {
    	"$err" : "not authorized for query on admin.system.namespaces",
    	"code" : 13
    } at src/mongo/shell/query.js:131
    # 限制已经不能访问了,需要授权
    > db.auth('root','root');
    1
    # 授权成功
    [root@dgstandby ~]# mongo admin -u root -p root
    MongoDB shell version: 2.6.4
    connecting to: admin
    > show collections;
    system.indexes
    system.users
    system.version
    # 现在用密码已经可以登陆了
    # 但是普通用户访问不了
    > mongo wzl -u scott -p tiger
    2017-04-16T16:22:45.359+0800 SyntaxError: Unexpected identifier
    # 但是可以通过用超级用户root登陆admin库,然后切换到wzl库就可以访问了
    [root@dgstandby ~]# mongo admin -u root -p root
    MongoDB shell version: 2.6.4
    connecting to: admin
    > show collections;
    system.indexes
    system.users
    system.version
    > show dbs
    admin  0.078GB
    local  0.078GB
    wzl    0.078GB
    > use wzl
    switched to db wzl
    > show collections;
    coll
    system.indexes

© 著作权归作者所有

下一篇: oracle 异地恢复
胡子叭槎
粉丝 22
博文 140
码字总数 147885
作品 0
成都
数据库管理员
私信 提问

暂无文章

JS基础-该如何理解原型、原型链?

JS的原型、原型链一直是比较难理解的内容,不少初学者甚至有一定经验的老鸟都不一定能完全说清楚,更多的"很可能"是一知半解,而这部分内容又是JS的核心内容,想要技术进阶的话肯定不能对这个...

OBKoro1
今天
6
0
高防CDN的出现是为了解决网站的哪些问题?

高防CDN是为了更好的服务网络而出现的,是通过高防DNS来实现的。高防CDN是通过智能化的系统判断来路,再反馈给用户,可以减轻用户使用过程的复杂程度。通过智能DNS解析,能让网站访问者连接到...

云漫网络Ruan
今天
14
0
OSChina 周一乱弹 —— 熟悉的味道,难道这就是恋爱的感觉

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @xiaoshiyue :好久没分享歌了分享张碧晨的单曲《今后我与自己流浪》 《今后我与自己流浪》- 张碧晨 手机党少年们想听歌,请使劲儿戳(这里)...

小小编辑
今天
2.9K
24
SpringBoot中 集成 redisTemplate 对 Redis 的操作(二)

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二) List 类型的操作 1、 向列表左侧添加数据 Long leftPush = redisTemplate.opsForList().leftPush("name", name); 2、 向列表右......

TcWong
今天
46
0
排序––快速排序(二)

根据排序––快速排序(一)的描述,现准备写一个快速排序的主体框架: 1、首先需要设置一个枢轴元素即setPivot(int i); 2、然后需要与枢轴元素进行比较即int comparePivot(int j); 3、最后...

FAT_mt
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部