zoukankan      html  css  js  c++  java
  • MongoDB 安装 增删改查

    MongoDB
     
    一 介绍
    1.高性能的数据存储解决方案是大多数大型Web应用程序和服务的核心。后端数据库负责存储一切东西,从用户账户的信息到购物车中的商品,以及博客和评论数据等。好的Web应用需要能够精确、高速和可靠的存储和检索数据。有多种不同的数据存储解决方案都可以用于存储和检索Web应用程序所需的数据。三种最常见的方案是:在文件系统的文件中直接存储、关系型数据库和NoSQL数据库。而MongoDB就是NoSQL数据库。
    2.NoSQL
    NoSQL(Not Only SQL),由提供缺乏传统SQL关系数据库的严格限制模型的存储和检索技术组成。NoSQL背后的主要动机是简化设计、水平扩展,以及对数据的可用性进行更精细的控制。NoSQL数据库的实现方式可能永远无法用传统的关系数据库来构造。MongoDB是目前能够得到的最流行并拥有最好的支持的NoSQL数据库。MongoDB和文档模型,在为Web应用程序和服务实现后端存储方面具有极大的灵活性和可扩展性。
    3.MongoDB
    MongoDB基于的文档模型把数据对象作为一个集合中单独的文档来存储。MongoDB通过使用集合将数据分组在一起。集合仅仅是一组具有相同或类似用途的文档,集合的行为很像传统的SQL数据库中的表,但是两者又有很大的不同,在MongoDB中,集合不执行严格的模式。
    (1)文档
    文档是MongoDB数据库中单个数据实体的表示。集合由一个或多个相关的对象组成。MongoDB和SQL之间的主要区别是MongoDB文档和SQL的行存在很大的不同。行数据是非常平坦的,意味着行中的每一个值都有一个列。而在MongoDB中,文档可以包含嵌入的子文档,从而为应用程序提供更密切的内在数据模型。
    在MongoDB中,代表文档的记录被存储为BSON,这是JSON的一个轻量级的二进制形式。MongoDB的字段/值对应于JavaScript的属性/值对。这就意味着,要把MongoDB的记录转换回你的nodejs应用程序中使用的JS对象,几乎没有必要进行翻译。
    {
        name:'new project',
        version:1,
        language:['javascript','html','css'],
        path:{temp:'/tmp',project:'opt/project'}
    }
    (2)数据类型
    BSON数据格式在以二进制形式存储Javascript对象时,提供了几种不同的类型使用,这些类型尽可能与javascript的类型相匹配。了解这些类型很重要,因为你可以真正的查询MongoDB,来发现具有某一类型的值的特定属性的对象。
    Double    String      Object       Array 
    Binary data         Object id       Boolean  Date
    Null     Regular Expression      JavaScript     Symbol
    32-bit integer      64-bit integer       Timestamp        Min Key         Max Key
     
    二 安装
    1.到官网上下载MongoDB的最新版本
    2.将mongodb文件路径下的bin添加到系统路径中
    3.新建目录,如d:datadb作为自己的数据库
    4.在控制台下使用以下命令启动MongoDB
    mongod --dbpath d:datadb     (将新建的路径作为默认的数据库路径)

    打开bin目录下的mongo.exe,注意。一旦进入了MongoDB shell后,就可以管理MongoDB的各个方面,shell有很多命令

    每条指令的意思是:
    使用和创建数据库:use mydb     (没有就创建)
    显示数据库: show dbs
    显示数据库状态:  db.stats()
    检查当前所用的数据库: db
    关闭数据库引擎: 
    use mydb 
    db.shutdownServer()
    删除数据库:
    use mydb
    db.dropDatabase()
     
    三 管理用户账户
    1.列出用户账户
    用户账户存储在每个数据库的db.system.users集合中,User对象包括_id,user,pwd,roles字段,有几个不同的方法来获取User对象的列表
    (1)列出admin数据库的用户
    use admin 
    show users
    (2)计算admin数据库的用户的数量
    在db.system.users集合上使用查询,如find
    use admin
    cur=db.system.users.find()
    cur.count()

    2.创建用户账户
    一旦创建了一个用户管理员,就可以使用该账户创建可管理、读取和写入数据库的其他用户账户。使用createUser()方法添加用户账户。该方法接受一个document对象,允许你指定适用于该用户的用户名、角色和密码。其中,可以在此document对象中指定的字段是:
    字段                   格式                         说明
    user                  string                 指定一个唯一的用户名
    roles                 array                  指定用户角色的数组
    pwd                 hashorstring       指定用户的密码
    userSource        <database>      代替pwd字段,指向具有相同的用户定义的另一个数据库
    otherDBRoles       {<database>:[array],<database>:[array]}        允许你指定这个用户在其他数据库中拥有的角色,格式是一个文档,数据库名称作为键,包括那个数据库适用于该用户的角色的数组
    MongoDB中提供了大量的角色,你可以将它们分配给一个用户账户。
    角色                         说明
    read                         允许用户从数据库的任何集合中读取数据
    readAnyDatabase     同read,但针对所有的数据库
    readWrite                 提供read的所有功能,并允许用户写数据库中的任何集合
    readWriteAnyDatabase      同readWrite,但针对所有的数据库
    dbAdmin                  允许用户读取和写入数据库,以及清理、修改、压缩、得到统计概要,并进行验证
    dbAdminAnyDatabase       同dbAdmin,但针对所有数据库
    clusterAdmin            允许用户对MongoDB执行一般的管理,包括连接、集群、复制、列出数据库、创建数据库和删除数据库
    userAdmin                允许用户创建和修改数据库的用户长湖
    userAdminAnyDatabase     同userAdmin,但针对所有的数据库

    此时查看用户情况:

     
    3.删除用户
    使用dropUser(username)方法删除用户,首先需要先切换到该用户所在的数据库。

    四 配置访问控制

    1.设置新的MongoDB实例的第一步就是创建用户管理员和数据库管理员账户。用户管理员具有在admin和其他数据库中创建用户账户的功能。此外,还需要创建一个可以当做超级用户使用的数据库管理员账户,用它来管理数据库、集群、复制和MongoDB的其他方面。
    2.用户管理员账户
    (1)创建用户管理员账户
    用户管理员应该只有创建用户的权限,而没有管理数据库或其他管理功能,这使数据库管理和用户账户管理完全分离。
    如:创建一个用户管理员账户,以userAdminAnyDatabase作为唯一的角色
    use admin
    db.createUser({user:'userAdmin',pwd:'test',roles:['userAdminAnyDatabase']})
    (2)打开身份验证
    一旦用户管理员账户已经创建,就需要使用--auth参数重新启动数据库
    mongod --dbpath d:datadb --auth

    客户端必须使用一个用户名和密码来访问数据库。
    use admin
    db.auth('userAdmin','test')

    也可以使用另一种方法来验证,在启动MongoDB的shell时使用--username和--password选项,并指定admin数据库
    mongo admin --username 'userAdmin' --password 'test'

     3.数据库管理员账户

    数据库管理员是一个具有readWriteAnyDatabase,dbAdminAnyDatabase和clusterAdmin权限的用户,这为该用户提供了访问系统中的所有数据库、创建新的数据库,并管理MongoDB的集群和副本的能力。如:
    use admin
    db.createUser({user:'dbAdmin',pwd:'test',roles:['readWriteAnyDatabase','dbAdminAnyDatabase','clusterAdmin']})

    验证方法同上

     
    五 数据库的管理
    1.显示数据库清单
    show dbs
    2.切换当前数据库
    两种方法:
    db.getSiblingDB('testDB')
    use testDB
    3.创建数据库
    MongoDB并没有显示创建数据库的一个命令,通过use database即可。但是注意,除非是把集合添加到新的数据库,否则这个数据库不会被保存。   

    如图,虽然切换到mydb中了,但是show dbs可以发现并没有该DB。

     
    在mydb中添加了集合之后,此时show dbs就可以看到mydb这个数据库了。
    4.删除数据库
    db.dropDatabase()

    5.复制数据库
    db.copyDatabase(origin,destination)
    其中,origin是一个字符串,指定了要复制的数据库的名称,destination指定了要创建的数据库的名称。
     
    六 管理集合
    1.创建集合
    db.createCollection(name,[options])
    可选的options是一个对象,该对象有如下属性:
    capped:一个布尔值,true表示该集合是一个封顶集合,它不会增长到比size属性指定的最大规模更大,默认为false
    autoIndexID:一个布尔值,如果为true则自动为添加到集合的每个文档创建一个_id字段并实现该字段上的索引,封顶集合应该为false,默认为true
    size:以字节为单位的大小,用于封顶集合
    max:在封顶集合中允许的最大文档数
    2.显示数据库中的集合列表
    show collections

    3.删除集合
    删除旧的集合会释放磁盘空间,并消除任何与集合关联的开销,如索引。
    4.将文档添加到集合中
    通常情况下,我们都是通过node.js应用程序网集合中插入文档,不过有时候也需要从管理的角度手动插入文档来预先加载数据局、修复数据库,或用于测试目的。
    将文档添加到一个集合,需要先得到collection对象,然后在该对象上调用insert(document)或save(document)方法,其中,document是被转换成BSON并存储在集合中的格式正确的JavaScript对象。
    5.在集合中查找文档
    大多数情况下,你可以使用一个库,如本地的MongoDB驱动程序或Mongoose访问文档的集合。有时也需要在MongoDB的shell中查看文档。
    可以使用collection对象上的find(query)方法,可选的query指定包含字段和值的查询文档和集合中的文档匹配。

    6.删除文档
    先得到collection对象,然后调用该对象的remove(query)方法
    7.更新文档
    首先要先得到该集合,然后使用save(object)或者update(query,update,options)方法来查找集合中的文档,然后在它们被找到时更新它们。
    使用update()方法时,query参数指定了字段和值与集合中的文档匹配的一个查询文档,update参数是一个对象,指定在作出更新时使用的更新运算符,如$inc为递增该字段的值,$set设置字段的值,$push将一个条目推送到数组等。options是一个对象,有两个属性:multi和upsert,都是布尔值,multi为true表示与查询匹配的所有文档都被更新,否则,值更新第一个文档个;upsert为true表示如果没有找到就创建一个新的文档。
     
     
     
     
     
     
  • 相关阅读:
    2014.3.3 图像旋转方法
    2014.2.23 datagridview显示图片的方法
    2016.10.8 文件读取和两种模式写入
    2016.8.11 DataTable合并及排除重复方法
    2016.8.17服务器端数据库用户导入导出方法 expdp和impdp
    2016.8.11 禁用360进程防护功能
    2016.7.27 VS搜索正则表达式,在UltraEdit中可选用Perl正则引擎,按C#语法搜索
    2016.6.18主窗体、子窗体InitializeComponent()事件、Load事件发生顺序以及SeleChanged事件的发生
    delphi之猥琐的webserver实现
    HTTP协议中GET、POST和HEAD的介绍
  • 原文地址:https://www.cnblogs.com/lyy-2016/p/6789776.html
Copyright © 2011-2022 走看看