zoukankan      html  css  js  c++  java
  • linux部署mongodb及基本操作

    原文:http://blog.csdn.net/jinzhencs/article/details/50930877

    一.安装部署mongo

    1.创建文件夹 
    /opt/mongodb/single 
    /opt/mongodb/data/db

    2.进入single目录下载安装包

    //下载 tar.gz文件
    wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.4.6.tgz

    3.解压 并修改文件名 
    mv mongodb-linux-x86_64-2.4.6 mongo

    4.进入mongo目录

    5.创建配置文件 
    – mkdir conf 
    – cd conf 
    – vim conf.properties

    #端口
    port=27017
    #db存放的目录
    dbpath=/opt/mongotest/data/db
    #后台启动需要配置日志输出
    logpath=/opt/mongotest/single/mongo/log/mongo.log
    #日志模式
    logappend=true
    #设置成后台启动
    fork=true 

    6.启动mongo 
    mongo目录执行

    root@chwx2:/opt/mongotest/single/mongo# ./bin/mongod -f conf/conf.properties 
    about to fork child process, waiting until server is ready for connections.
    forked process: 4988
    all output going to: /opt/mongotest/single/mongo/log/mongo.log
    child process started successfully, parent exiting

    表示后台启动mongo成功

    二.使用mongo进行日常操作

    1.连接mongodb 
    mongo/bin目录下执行 
    ./mongo

    2.查看数据库 
    show dbs

    3.查看当前所在数据库 
    db

    4.创建数据库 
    use openfire (临时创建 如果不做操作 则离开后被系统删除)

    5.在当前数据库删除当前数据库 
    db.dropDatabase()

    6.查看当前库的所有用户 
    show users

    7.查看集合(或者叫表) 
    show collections

    8.创建集合 
    db.createCollection(“mycollection”)

    9.创建集合并制定集合的属性 
    db.createCollection(“mycol”, { capped : true, autoIndexID : true, size : 6142800, max : 10000 } )

    字段类型描述
    capped Boolean (可选)如果为true,则启用封顶集合。封顶集合是固定大小的集合,会自动覆盖最早的条目,当它达到其最大大小。如果指定true,则需要也指定尺寸参数。
    autoIndexID Boolean (可选)如果为true,自动创建索引_id字段的默认值是false。
    size number (可选)指定最大大小字节封顶集合。如果封顶如果是 true,那么你还需要指定这个字段。
    max number (可选)指定封顶集合允许在文件的最大数量。

    10.另一种创建集合 
    (当插入一条数据时,不存在mongodb会帮我们创建,和创建数据库同理) 
    db.MySecondCollection.insert({“name” : “ming”})

    11.删除当前库的一个集合 
    db.CollectionName.drop()

    12.插入一条数据 
    db.MyFirstCollection.insert({“_id”:”3”,”title”:”mongotest”,”description”:”this is test”}) 
    注意:插入的都是JSON形式的,所以一定要用{},否则会报错: 
    Sat Mar 19 14:22:39.160 SyntaxError: Unexpected token :

    13.插入一条_id存在的数据 
    db.MyFirstCollection.insert({“_id”:”3”,”title”:”mm”}) 
    输出:E11000 duplicate key error index: openfire.MyFirstCollection.$_id_ dup key: { : “3” } 
    解释:_id即是mongodb的默认主键,默认自动生成,我们可以直接设置以达到我们想要的目的

    问:插入一条和原来集合完全不一样的数据可以吗?
    答:可以,所以我们要在程序中规避,手动指定我们一个集合里面的字段,否则就无法实现查询及其他功能了
    > db.MyFirstCollection.insert({"newTitle":"null"})
    > db.MyFirstCollection.find();
    { "_id" : "3", "title" : "new title", "description" : "this is test" }
    { "_id" : ObjectId("56ecf4fe0dceecace97c4506"), "newTitle" : "null" }

    14.查看集合第一条记录 
    db.MySecondCollection.findOne(); 
    输出:{ “_id” : ObjectId(“56ecde0662552d15c443dd4a”), “name” : “ming” }

    15.查找一条/多条特定数据 
    db.MySecondCollection.findOne({“name”:”ming”}) 
    输出:{ “_id” : ObjectId(“56ecde0662552d15c443dd4a”), “name” : “ming” }

    16.更新一条记录 
    db.MyFirstCollection.update({“title”:”mongotest”},{$set:{“title”:”new title”}},true,false) 
    结果: 
    db.MyFirstCollection.findOne() 
    { “_id” : “3”, “title” : “new title”, “description” : “this is test” }

    update详解

    db.collection.update(criteria,objNew,upsert,multi)
    
    criteria:查询条件
    objNew:update对象和一些更新操作符
    upsert:如果不存在update的记录,是否插入objNew这个新的文档,true为插入,默认为false,不插入。
    multi:默认是false,只更新找到的第一条记录。如果为true,把按条件查询出来的记录全部更新。
    
    更新操作符:
    1.$inc
    用法:{$inc:{field:value}}
    作用:对一个数字字段的某个field增加value
    示例:db.students.update({name:"student"},{$inc:{age:5}})  
    
    2.$set
    用法:{$set:{field:value}}
    作用:把文档中某个字段field的值设为value
    示例:db.students.update({name:"student"},{$set:{age:23}})
    
    3.$unset
    用法:{$unset:{field:1}}
    作用:删除某个字段field
    示例: db.students.update({name:"student"},{$unset:{age:1}})
    
    4.$push
    用法:{$push:{field:value}}
    作用:把value追加到field里。注:field只能是数组类型,如果field不存在,会自动插入一个数组类型
    示例:db.students.update({name:"student"},{$push:{"title":"major"}}
    
    5.$rename
    用法:{$rename:{old_field_name:new_field_name}}
    作用:对字段进行重命名(不是值,是字段)
    示例:db.students.update({name:"student"},{$rename:{"name":"newname"}}) 

    设置用户权限及访问

    1.给admin添加用户

    切换到admin库:use admin 
    添加admin用户:db.addUser(“root”,”admin”)

    注意:必须先给admin库添加用户,否则就算给具体的库添加了用户,后续进入依然能操作具体库. 
    因为默认admin库用户具有最高权限,相当于具体库需要认证时,进入的用户持有的是admin的权限,所以无需认证依然能进行操作.

    2.给具体库添加用户

    use openfire
    db.addUser("openfire","password")

    3.重启mongo并在启动时配置需要认证

    方法一:退出重启并加上auth参数 
    ./bin/mongod -f conf/conf.properties –auth(注意是两个-)

    方法二:修改配置文件,加上参数(推荐) 
    auth=true

    3.测试权限

    >use openfire
    >db.MySecondCollection.findOne();
    
    Sat Mar 19 14:04:55.653 error: {
        "$err" : "not authorized for query on openfire.MySecondCollection",
        "code" : 16550
    } at src/mongo/shell/query.js:128

    4.认证并操作

    //此处应该设置成更加恰当的用户名及密码
    > db.auth("openfire","password")
    1
    > db.MySecondCollection.findOne()
    { "_id" : ObjectId("56ecde0662552d15c443dd4a"), "name" : "ming" }
    > 

    5.另一种方法认证

    在进入mongo时候加上数据库及用户名、密码 
    ./bin/mongo openfire -uopenfire -ppassword

    root@test:/opt/mongotest/single/mongo# ./bin/mongo openfire -uopenfire -ppassword
    MongoDB shell version: 2.4.6
    connecting to: openfire
    > db
    openfire
    > db.MySecondCollection.findOne()
    { "_id" : ObjectId("56ecde0662552d15c443dd4a"), "name" : "ming" }
    > 

    mongdb进阶

    1.find()指定返回字段 
    作用:减少流量

    如果key:value,返回的value是个非常大的JSON,而我们不需要这么多字段,也许我们只需要其中的一个.

    那么使用projection来过滤: 
    db.collection.find(query, projection) 此处projection就是返回值的过滤条件

    参数类型描述
    query 文档 可选. 使用查询操作符指定查询条件
    projection 文档 可选.使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略).

    返回值: 匹配查询条件的文档集合的游标. 如果指定投影参数,查询出的文档返回指定的键 ,”_id”键也可以从集合中移除掉。 
    _id不指定的话,总是会返回. 
    1或者true代表返回,0或者false代表不返回

    示例: 
    db.MyFirstCollection.findOne({“title”:”new title”},{“description”:1,”_id”:0}); 
    { “description” : “this is test” }

    也可以使用表达式: 
    db.MyFirstCollection.findOne({“title”:”new title”},{Items:{“$slice”:[3,1]}});

    引用: http://www.cnblogs.com/crazylights/archive/2013/05/08/3068098.html

  • 相关阅读:
    染色问题的算法(转)
    函数的定义域和定义区间的区别(转)
    详解c++指针的指针和指针的引用(转)
    母函数(转)
    别人整理的DP大全(转)
    HDU 1430 魔板(康托展开+BFS+预处理)
    ZZULIOJ 1726 迷宫(BFS+小坑)
    NBUT 1635 Explosion(最小顶点覆盖)
    NBUT 1602 Mod Three(线段树单点更新区间查询)
    NBUT 1028 该减肥了(简单递推)
  • 原文地址:https://www.cnblogs.com/shihaiming/p/6100627.html
Copyright © 2011-2022 走看看