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:\data\db作为自己的数据库
4.在控制台下使用以下命令启动MongoDB
mongod --dbpath d:\data\db     (将新建的路径作为默认的数据库路径)

打开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:\data\db --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表示如果没有找到就创建一个新的文档。
 
 
 
 
 

MongoDB 安装 增删改查的更多相关文章

  1. python操作三大主流数据库(8)python操作mongodb数据库②python使用pymongo操作mongodb的增删改查

    python操作mongodb数据库②python使用pymongo操作mongodb的增删改查 文档http://api.mongodb.com/python/current/api/index.h ...

  2. python 全栈开发,Day124(MongoDB初识,增删改查操作,数据类型,$关键字以及$修改器,"$"的奇妙用法,Array Object 的特殊操作,选取跳过排序,客户端操作)

    一.MongoDB初识 什么是MongoDB MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介 ...

  3. mongod 安装,增删改查

    SQL - MySQL Oracel DB2 sybase MSSQLMySQL : PHP > LAMPMySQL - 关系型数据库  - 语言学习成本高user_infoid  name   ...

  4. Java连接MongoDB进行增删改查

    1.导入必须的包: 详情看项目:http://pan.baidu.com/s/1cvDAOY 2.通过Myeclipse创建WEB项目 3. 3.bean:创建实体类 package com.bean ...

  5. MongoDB的增删改查 转

    MongoDB的增删改查 (黎明你好原创作品,转载请注明) MongoDB中数据的基本单元叫做文档,采用json的键-值的方式.多个键及其关联的值有序的存放在一起变是文档.类似于编程语言中的键值关系. ...

  6. Java实现mongodb原生增删改查语句

    Java实现mongodb原生增删改查语句 2018-03-16 自动化测试时,需校验数据库数据,为了快速自动化,在代码中用原生增删改查语句操作mongodb 结构 代码 0 pom.xml < ...

  7. Scala对MongoDB的增删改查操作

    =========================================== 原文链接: Scala对MongoDB的增删改查操作 转载请注明出处! ==================== ...

  8. C# 对MongoDB 进行增删改查的简单操作

    C# 对MongoDB 进行增删改查的简单操作   下面演示下C#操作MongoDB驱动的简单的增删改查代码 运用到的MongoDB支持的C#驱动,当前版本为1.6.0 1,连接数据库   /// & ...

  9. 2,MongoDB之增删改查及pymongo的使用

    本章我们来学习一下关于 MongoDB的增删改查 一.MongoDB操作 之 原生ORM,根本不存在SQL语句 创建数据库:这里和一般的关系型数据库一样,都要先建立一个自己的数据库空间 是的,Mong ...

随机推荐

  1. Django 玩转API

    现在,让我们进入Python的交互式shell,玩转这些Django提供给你的API. 使用如下命令来调用Python shell: $ python manage.py shell 我们使用上述命令 ...

  2. Gluon sgd

    from mxnet import nd,autograd,init,gluon from mxnet.gluon import data as gdata,loss as gloss,nn num_ ...

  3. JavaScript小游戏--2048(PC端)

    1.初始化棋局 $(document).ready(function() { prepare_for_mobile(); //适配移动端 new_game(); }); 2.开始新游戏 functio ...

  4. Redis启动问题解决方案

    linux下redis overcommit_memory的问题 我在启动Redis的时候出现如下警告信息. 警告信息:WARNING overcommit_memory is set to 0! B ...

  5. iview中position: 'fixed'最顶层z-index

    使用iview时候使用<Header :style="{position: 'fixed', width: '100%'}">不是最顶层解决方案 根据样式进行解决在ap ...

  6. A Gentle Introduction to Transfer Learning for Deep Learning | 迁移学习

    by Jason Brownlee on December 20, 2017 in Better Deep Learning Transfer learning is a machine learni ...

  7. OC变量命名禁忌

    OC变量命名禁忌 1.在NSString类不能定义变量名为description, 每个类都有 - (NSString *)description{} 这样一个get方法. 2.不能将变量的名称定义为 ...

  8. AOP切点切面内容

    一.实现接口MethodBeforeAdvice该拦截器会在调用方法前执行             实现接口   AfterReturningAdvice该拦截器会在调用方法后执行          ...

  9. 过滤器Filter在配置文件中不起作用

    web.xml内容 <filter> <filter-name>LoginFilter</filter-name> <filter-class>com. ...

  10. ASP.Net Mvc 5 学习记录2015-9-9

    我之前一直都是学习和开发都采用ASP.Net WebForm,对MVC的一直都是一知半解,最初以为ASP.Net WebForm的N层架构就是MVC.其实N层架构设计思想是"高内聚,低耦合& ...