MongoDB的了解

MongoDB:
是一个面向文档存储的数据库,操作起来比较简单和容易。面向文档、面向文档、面向文档------------------------重要事情说三遍

MongoDB不支持表连接,所以他是NOSql,非关系型数据库。默认主键就是_id,还可以创建索引
MongoDB支持存储过程,它是javascript写的,保存在db.system.js表中。

你可以在MongoDB记录中设置任何属性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序。

安装:https://baijiahao.baidu.com/s?id=1645699567643647036&wfr=spider&for=pc 
我下载的是:mongodb-linux-x86_64-rhel70-4.2.7.tgz
启动:bin目录下面的  ./mongod --port 27017 --dbpath=/data/mongodb      dbpath是文档保存路径

上面是简介版

专业版:http://blog.itpub.net/69902483/viewspace-2317563/   按照这个来
useradd mongodb
然后使用mongodb用户
mv mongodb-linux-x86_64-rhel70-4.2.7 mongodbServer
cd mongodbServer
mkdir -p data logs etc
cd etc
vim mongodb.conf

配置文件信息:
dbpath=../data      
logpath=../logs/mongodb.log
port=27017
fork=true
auth=true

路径要../data 不然会报错,因为启动的时候使用的是mongodb这个用户。
启动:bin目录下面的
    ./mongod --config ../etc/mongodb.conf 
    
就已经开启了mongodb了,现在进入客户端,就像redis一样。


首先要了解mongodb的对应关系:database就相当于数据库  命令:>use database_name
                             connection相当于表      命令:>db.createCollection("集合名词")
                             插入数据                命令:>db.集合名词.insert({"li":"真的帅","chuan":"太帅"})
                              db.collection.insertOne():向指定集合中插入一条文档数据
                              db.collection.insertMany():向指定集合中插入多条文档数据
                    

    ./mongo
    添加管理用户
    >use admin;
    >db.createUser( {user: "mongodb",pwd: "123456",roles: [ { role:  "userAdminAnyDatabase", db: "admin" } ]});
    上一步是添加了一个用户mongodb,密码是123456,角色就是userAdminAnyDatabase,db就是所在的数据库是哪一个。跟mysql差不多,也是使用use来切换数据库
    注意:
    (1)mongoDB 没有root用户,只有能管理用户的用户userAdminAnyDatabase;

    (2)添加完用户后可以使用以下命令查看已有用户:
    
    上面是新增了一个用户,然后就需要认证用户权限了。
    >db.auth("test","123456")
    这个要备注一下,每次进入admin这个数据库里面,都需要认证一下。后面所有的操作,也都是先认证后面再进行的。不然都会告知没有权限。
    接着就可以查看具体信息了。因为我把mongodb设置成了userAdminAnyDatabase这个角色,所以是有权限查看的。
    >show users;
    然后会出现下面这段json
    {
        "_id" : "admin.mongodb",
        "userId" : UUID("4f37dd17-4523-4597-96b1-7676cba38b41"),
        "user" : "mongodb",
        "db" : "admin",
        "roles" : [
                {
                        "role" : "userAdminAnyDatabase",
                        "db" : "admin"
                }
        ],
        "mechanisms" : [
                "SCRAM-SHA-1",
                "SCRAM-SHA-256"
        ]
    }


    授予权限db.grantRolesToUser
    例如:db.grantRolesToUser("test",[{role:"readWrite",db:"li"}])
    取消权限db.revokeRolesFromUser
    例如:db.revokeRolesFromUser("a1",[{role:"readWrite",db:"test2"}])
    
    tm的这个有步骤的,先mongo进入到客户端,然后进入到admin里面去创建用户,赋予对应的权限。
    比如创建了一个test用户,权限若是readWrite的话,指定的数据库是li,那么进入到li这个数据之后,test用户是没有创建集合(表)的权限的。
    所以若是需要创建数据库里面的表,则又要赋予test又userAdmin的权限,这权限就是可以创建集合的权限。
    
    注意:(1)若是你创建了一个数据库,但是里面并没有集合的话,当你退出这个数据库之后,该库会自动删除的。
          (2)还有就是一个mongodb的client,只能auth一次,但你需要切换用户的时候,需要退出之后再进来,狗日的。所以你需要提前把数据库和用户权限设置好。
    
    
    
    创建集合,相当于数据库里面的表
    db.createCollection("li")
    
    创建好了集合之后,就可以添加数据了。
    
    正确的关闭方式:
    通过shell连上服务器:

    >use admin

    >db.shutdownServer()

   千万不要用 kill -9 pid,会导致数据丢失
   
   db.集合名词.find()    查询该集合有哪些数据
    
    
    
    
mongodb的 Roles(内置角色):
    1. 数据库用户角色:read、readWrite;
    2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
    3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
    4. 备份恢复角色:backup、restore;
    5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
    6. 超级用户角色:root 
    // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
    7. 内部角色:__system


具体角色:

Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限。

重点来了:面试
(1)什么是MongoDB?
    MongoDB是一个文档数据库,采用BSON存储文档数据。BSON()是一种类json的一种二进制形式的存储格式,简称Binary JSON.
    相对于json多了date类型和二进制数组。
(2)MongoDB的优势有哪些
    面向文档的存储:以 JSON 格式的文档保存数据。
    任何属性都可以建立索引。
    复制以及高可扩展性。
    自动分片。
    丰富的查询功能。
    快速的即时更新。
(3)什么是数据库
    数据库是一个所有集合的容器,在文件系统中每一个数据库都有一个相关的物理文件。
(4)什么是集合
    一个集合内的多个文档可以有多个不同的字段。一般来说,集合中的文档都有着相同或相关的目的。
(5)什么是文档(记录)
    相当于关系型数据库里面的每条记录,但是mongodb的每条文档的字段可以不同
(6)mongodb的术语表达
    database相当于库
    connection相当于表
    document相当于行    -----就是一条json
    field相当于字段属性
(7)什么是非关系型数据库
    非关系型数据库的显著特点是不使用SQL作为查询语言,数据存储不需要特定的表格模式。
(8)mongodb的优势
    架构简单
    没有复杂的连接
    深度查询能力,MongoDB支持动态查询。
    容易调试
    容易扩展
    不需要转化/映射应用对象到数据库对象
    使用内部内存作为存储工作区,以便更快的存取数据。
(9)在哪些场景使用MongoDB
    大数据
(10)monogodb 中的分片什么意思
    分片是将数据水平切分到不同的物理节点。当应用数据越来越大的时候,数据量也会越来越大。当数据量增长
    时,单台机器有可能无法存储数据或可接受的读取写入吞吐量。利用分片技术可以添加更多的机器来应对数据量增加
    以及读写操作的要求。
(11)为什么要在MongoDB中使用分析器
    mongodb中包括了一个可以显示数据库中每个操作性能特点的数据库分析器.通过这个分析器你可以找到比预期慢
    的查询(或写操作);利用这一信息,比如,可以确定是否需要添加索引.
(12)MongoDB支持哪些数据类型
    String
    Integer
    Double
    Boolean
    Object
    Object ID
    Arrays
    Min/Max Keys
    Datetime
    Code
    Regular Expression等
(13)为什么要在MongoDB中用"Code"数据类型
    "Code"类型用于在文档中存储 JavaScript 代码。
(14)为什么要在MongoDB中用"Regular Expression"数据类型
    Regular Expression"类型用于在文档中存储正则表达式
(15)为什么在MongoDB中使用"Object ID"数据类型
    "ObjectID"数据类型用于存储文档id
    
(16)在MongoDb中什么是索引
    索引用于高效的执行查询,没有索引的MongoDB将扫描整个集合中的所有文档,这种扫描效率很低,需要处理大量的数据.
    索引是一种特殊的数据结构,将一小块数据集合保存为容易遍历的形式.索引能够存储某种特殊字段或字段集的值,并按照索引指定的方式将字段值进行排序.
(17)如何添加索引
    使用db.collection.createIndex()在集合中创建一个索引
(18)如何查询集合中的文档
    db.collectionName.find({key:value})
(19)用什么方法可以格式化输出结果
    db.collectionName.find().pretty()
(20)如何使用"AND"或"OR"条件循环查询集合中的文档
    db.mycol.find(
        {
            or: [
                {key1: value1}, {key2:value2}
            ]
        }
    ).pretty()
    
(21)更新数据
    db.collectionName.update({key:value},{$set:{newkey:newValue}})
(22)如何删除文档    
    db.collectionName.remove({key:value})
(23)在MongoDB中如何排序    
    db.connectionName.find({key:value}).sort({columnName:1})
(24)什么是聚合
    db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
(25)什么是NoSQL数据库?NoSQL和RDBMS有什么区别?在哪些情况下使用和不使用NoSQL数据库?
    NoSQL是非关系型数据库,NoSQL = Not Only SQL。
    关系型数据库采用的结构化的数据,NoSQL采用的是键值对的方式存储数据。
    在处理非结构化/半结构化的大数据时;在水平方向上进行扩展时;随时应对动态增加的数据项时可以优先考虑
    使用NoSQL数据库。
    在考虑数据库的成熟度;支持;分析和商业智能;管理及专业性等问题时,应优先考虑关系型数据库。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值