什么是MongoDB
MongoDB是一只非关系型数据库。和Mysql等关系型数据库最大的区别就是,Mysql存储数据,是通过表的形式来存储数据,而MongoDB是通过键值对的形式存储数据。比如数据库中需要存储一下的信息,MongoDB和Mysql的存储方式不一样:
Mysql的存储方式如下,使用行列表格的形式:
Id | Name | EnglishName | age |
1001 | 张三 | peter | 18 |
1002 | 李四 | 22 |
MongoDB的存储方式是以文档的方式存储,使用键值对文档来存储数据(BSON,类似JSON的一种格式),这里表中的主键MongoDB提供了key为"_id":
{ "_id": ObjectId("4152aa54d554896851423f2"), "Name": "张三", "EnglishName": "peter", "age": 18}{ "_id": ObjectId("4152aa54d554896851423f1"), "Name": "李四", "age": 22}
从上面两种数据库存储方式的不一样可以发现,Mysql在存储一条数据(一行)的时候,每一个元组都需要固定的形式存储,即使不需要某个字段,Mysql也需要开辟一个存储空间来存储这个空字段(比如说如上所示的“李四”的英文名就是空),虽然这样的存储结构利于表与表之间的连接等操作,但这也是关系型数据库性能瓶颈的一个因素;而MongoDB存储是以JSON文档的形式,每条数据以灵活的方式存储,但缺点是查询效率不高,没有统一的查询方式。
一个MongoDB 实例可以包含一组数据库DataBase,一个数据库DataBase 可以包含一组集合Collection(MongoDB中的集合概念就相当于Mysql中没有模式的表结构),一个集合可以包含一组文档Document(相当于Mysql中的一个元组,一列数据)。一个Document包含一组字段field(相当于Mysql中的一条数据中的一个字段),每一个字段都是一个key/value。
学习MongoDB,我是照着Mysql学习的,希望有什么地方不对,请大佬指出。
安装MongoDB
下载地址:,选择Community Server社区版本下载。
安装的时候注意安装路径,之后配置MongoDB文件的时候会用到这个路径。比如我安装在D:\MongoDB下面。
安装好了之后,打开资源管理器。如果是最新版本的MongoDB,有log这个文件(如果没有就新建一个log文件夹),我们在log文件夹下新建一个MongoDB.log,然后在MongoDB文件夹下新建一个配置文件mongo.conf并编写:
#数据库路径dbpath=D:\MongoDB\data\db#日志输出文件路径logpath=D:\MongoDB\log\MongoDB.log#错误日志采用追加模式logappend=true#启用日志文件,默认启用journal=true#这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为falsequiet=true#端口号 默认为27017 Mysql默认端口号为3306port=27017
完成之后具体格式如下:
此时我们需要在windows上安装MongoDB服务,管理员身份打开cmd,进入bin路径下执行如下语句:
mongod --dbpath D:\MongoDB\data\db --logpath D:\MongoDB\log\MongoDB.log --logappend --serviceName MongoDB --auth –install
注意语句中的路径不要写错了。
执行完之后,我们打开log中的MongoDB.log,可以看到
2018-08-13T11:33:50.097+0800 I CONTROL [main] Service can be started from the command line with 'net start MongoDB'
所以在cmd中我们使用:net start MongoDB就可以启动MongoDB服务了。
启动成功之后我们在浏览器中打开:,就可以看到MongoDB Server已经启动成功了。
连接MongoDB
cmd命令提示符进入MongoDB安装路径的bin路径,使用mongo命令连接数据库,使用exit断开数据库连接
接下来我们查看MongoDB给我们提供了哪些操作语法给我们使用(类似Mysql中的SQL语句,但其实和SQL有很大区别)。
以下为MongoDB常用的命令(有时间多学习和操作一下):
看过之后我们还是要实际操作一些工作中最基本的命令:
1.创建一个自己的数据库:use dbname,首先创建名为admin的数据库,在MongoDB 3.0之后,需要加入auth认证才能获取相关权限进行操作(说白了就是添加用户和指定该用户的角色和权限)。而这个权限只能在admin数据库中添加,如果没有admin数据库,就新建一个:
use admin
使用如下命令添加一个用户:
db.createUser( { user: "MasterBai", pwd: "huidong123", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] })
这里role字段有如下角色和相关权限可选择:
read:允许用户读取指定数据库readWrite:允许用户读写指定数据库dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profileuserAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。root:只在admin数据库中可用。超级账号,超级权限
把这个MasterBai用户创建好了之后,使用auth认证(就相当于登陆):
db.auth("MasterBai","huidong123")
注意:这个auth认证的数据库环境,和新建该用户的时候,处于哪个数据库下有关。就比如说我在admin下创建了MasterBai这个用户,那么我只能在admin的数据库下进行这个auth认证,其他数据库下对MasterBai用户及逆行auth认证会报错。
我们新建先切换到MasterBaiDB数据库下(至于为什么要先切换数据库环境再创建用户,看上面注意事项)
use MasterBaiDBdb.createUser({ user:"huidong" pwd:"huidong" roles:[{role:"readWrite",db:"MasterBaiDB"}]})
创建成功之后呢,对huidong用户进行auth认证(因为此时我们任然处于MasterBai用户下)
db.auth("huidong","huidong")
认证成功之后,我们往MasterBaiDB中插入第一条数据:
db.MasterBaiDB.insert({"name":"张三"})
所以至此为止搞明白了,MongoDB中,数据库为大,用户在数据库之下,所有的数据操作,我们第一步,就先要切换到目标数据库,然后进行auth认证,最后再进行数据操作。
这里我为了更方面自己又加了一个角色为root的超级管理员用户。
MongoDB数据操作
好,此时我们使用刚刚创建的root用户,此时我们新建一个数据库叫做baihuidong。这个时候我们show dbs是看不到这个数据库的, 我们往里面插入一些数据:
use baihuidongdb.baihuidong2.insert({"EnglishName":"Peter"}) //这里自动新建一个baihuidong2的集合,插入相关数据,所以MongoDB里面不需要我们去新建表结构
此时show dbs已经可以看到baihuidong这个数据库了
以下为常见的数据库操作语句:
删除当前所在的数据库
db.dropDatabase()
删除集合呢?使用
db.collection.drop()
数据插入:
db.collection.insert({"a":1})db.collection.insertOne({"b":2})db.collection.insertMany([{"c":3},{"d":4},{"e":5}])
数据查询
db.collection.find() //该集合所有数据