美文网首页我爱编程
MongoDB/安装/基本命令

MongoDB/安装/基本命令

作者: 米刀灵 | 来源:发表于2016-09-09 22:45 被阅读31次

    mongoDB的存储方式是文档式存储,并不是Key-Value形式。存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各种复杂的文件类型。我们称这种存储形式为BSON(Binary JSON)。
    模式自由(schema-free),意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。
    mongoDB中有三元素:数据库,集合,文档,其中“集合”就是对应关系数据库中的“表”,“文档”对应“行”。

    安装:
    下载:wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.9.tgz
    解压:tar -zxvf mongodb-linux-x86_64-rhel62-3.2.9.tgz
    创建目录:mv mongodb-linux-x86_64-rhel62-3.2.9 mongodb
    mkdir /usr/local/mongodb/data
    mkdir /usr/local/mongodb/data/db
    mkdir /usr/local/mongodb/data/logs
    写配置文件
    touch /usr/local/mongodb/mongodb.conf

    bind_ip=0.0.0   
    port=27017 
    #端口号
    dbpath=/usr/local/mongodb/data/db
    #数据目录
    logpath=/usr/local/mongodb/data/logs/mongodb.log
    #日志目录
    fork=true 
    #设置后台运行
    logappend=true 
    #日志输出方式
    shardsvr=true
    directoryperdb=true
    #auth=true 
    #开启认证
    

    启动:./bin/mongod --config /usr/local/mongodb/mongodb.conf


    连接:./bin/mongo
    查看安装信息:db.runCommand({"buildInfo":1})

    权限:
    可以将 MongoDB 的用户分为两类:超级用户和数据库用户。超级用户拥有最大权限,可以对所有数据库进行任意操作,超级用户储存在 admin 数据库中,刚安装的 MongoDB 中 admin 数据库是空的。
    数据库用户存储在单个数据库中,只能访问对应的数据库。另外,用户信息保存在 db.system.users 中。

    关于用户和权限有以下特性:

    • 数据库是由超级用户来创建的,一个数据库可以包含多个用户,一个用户只能在一个数据库下,不同数据库中的用户可以同名
    • 如果在 admin 数据库中不存在用户,即使 mongod 启动时添加了 –auth 参数,此时不进行任何认证还是可以做任何操作
    • 在 admin 数据库创建的用户具有超级权限,可以对 MongoDB 系统内的任何数据库的数据对象进行操作
    • 特定数据库比如 test1 下的用户 test_user1,不能够访问其他数据库 test2,但是可以访问本数据库下其他用户创建的数据
    • 不同数据库中同名的用户不能够登录其他数据库。比如数据库 test1 和 test2 都有用户 test_user,以 test_user 登录 test1 后,不能够登录到 test2 进行数据库操作

    创建超级用户:
    userAdminAnyDatabase 权限只是针对用户管理的,对其他信息(读写数据等)是没有权限的。(root角色可以)。

    use admin
    db.createUser(
      {
        user: "buru",
        pwd: "12345678",
        roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
      }
    )
    

    创建数据库用户:



    认证:
    所有帐号都需要认证后才能操作。只能在帐号创建库下认证,才能再去其他库进行操作(哪里创建哪里认证)。



    查看所有用户:

    CRUD:

    use myinfo
    
    document=({"user_id" : "ABCDBWN","password" :"ABCDBWN" ,"date_of_join" :  
    "15/10/2010" ,"education" :"B.C.A." , "profession" : "DEVELOPER","interest" :  
    "MUSIC","community_name" :["MODERN MUSIC", "CLASSICAL  
    MUSIC","WESTERN MUSIC"],"community_moder_id" : ["MR. BBB","MR. JJJ","MR  
    MMM"],"community_members" : [500,200,1500],"friends_id" :  
    ["MMM123","NNN123","OOO123"],"ban_friends_id" :  
    ["BAN123","BAN456","BAN789"]});
    
    db.userdetails.insert(document)
    db.userdetails.find();
    db.testtable.find({age : {$lt :24, $gt : 17}})
    db.users.find({name: {$type: 2}});//根据数据类型,2表示字符串。
    db.mycol.find({}).limit(1).skip(1)
    db.mycol.find({}).sort({"title":-1})//1为升序,-1为降序。
    

    db.collection.update( criteria, objNew, upsert, multi )
    update()函数接受以下四个参数:

    • criteria : update的查询条件,类似sql update查询内where后面的。
    • objNew : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
    • upsert : 这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
    • multi : mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
    db.recru.update({"name":"joe"},{$set:{"age":25}})
    db.test.update( { "age" : { $gt : 20 } } , { $set : { "age_level" : "20"} },false,true );
    

    删除表,集合,库

    db.userdetails.remove( { "user_id" : "testuser" } )
    db.userdetails.drop()
    db.dropDatabase()
    

    MongoDB使用 ensureIndex() 方法来创建索引:

    db.mycol.ensureIndex({"title":1})//单列索引,1为指定按升序创建索引,-1为降序。
    db.mycol.ensureIndex({"title":1,"description":-1})//多列索引。
    db.values.ensureIndex({open: 1, close: 1}, {background: true})//在后台(非阻塞)创建索引。
    db.test.ensureIndex({"userid":1},{"unique":true})//唯一索引
    db.test.getIndexes()//查看索引
    db.test.dropIndex({"username":1})//删除索引
    

    聚合操作:

    db.mycol.aggregate([{$group : {_id : "$owner_id", num_tutorial : {$sum : 1}}}]) //计算每个拥有者拥有的数量。
    

    管道操作:

    结果中就只还有_id,tilte和author三个字段了,默认情况下包含_id
    db.article.aggregate(
        { $project : {
            title : 1 ,
            author : 1 ,
        }}
    );
    
    不包含_id
    db.article.aggregate(
    { $project : {
        _id : 0 ,
        title : 1 ,
        author : 1
    }});
    $match用于获取分数大于70小于或等于90记录,然后将符合条件的记录送到下一阶段$group管道操作符进行处理。
    db.articles.aggregate( [
                            { $match : { score : { $gt : 70, $lte : 90 } } },
                            { $group: { _id: null, count: { $sum: 1 } } }
                           ] );
    
    经过$skip管道操作符处理后,前五个文档被"过滤"掉。
    db.article.aggregate(
        { $skip : 5 }
    );
    

    参考:
    https://wizardforcel.gitbooks.io/w3school-mongodb/content/10.html

    相关文章

      网友评论

        本文标题:MongoDB/安装/基本命令

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