热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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

MongoDB 安装 增删改查

每条指令的意思是:
使用和创建数据库: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()

MongoDB 安装 增删改查

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

此时查看用户情况:

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

 

四 配置访问控制

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

MongoDB 安装 增删改查

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

MongoDB 安装 增删改查

也可以使用另一种方法来验证,在启动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']})

MongoDB 安装 增删改查

验证方法同上

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

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

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

MongoDB 安装 增删改查

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

MongoDB 安装 增删改查

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

MongoDB 安装 增删改查

6.删除文档
先得到collection对象,然后调用该对象的remove(query)方法
MongoDB 安装 增删改查
7.更新文档
首先要先得到该集合,然后使用save(object)或者update(query,update,options)方法来查找集合中的文档,然后在它们被找到时更新它们。
使用update()方法时,query参数指定了字段和值与集合中的文档匹配的一个查询文档,update参数是一个对象,指定在作出更新时使用的更新运算符,如$inc为递增该字段的值,$set设置字段的值,$push将一个条目推送到数组等。options是一个对象,有两个属性:multi和upsert,都是布尔值,multi为true表示与查询匹配的所有文档都被更新,否则,值更新第一个文档个;upsert为true表示如果没有找到就创建一个新的文档。
 
 
 
 
 
 

推荐阅读
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 【MEGA DEAL】Ruby on Rails编码训练营(97%折扣)限时特惠!
    本文介绍了JCG Deals商店提供的Ruby on Rails编码训练营的超值优惠活动,现在只需29美元即可获得,原价为$1,296。Ruby on Rails是一种用于Web开发的编程语言,即使没有编程或网页设计经验,也能在几分钟内构建专业的网站。该训练营共有6门课程,包括使用Ruby on Rails进行BDD的课程,使用RSpec 3和Capybara等。限时特惠,机会难得,赶快行动吧! ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
author-avatar
完颜777_870
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有