博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MongoDB学习笔记Day1
阅读量:4970 次
发布时间:2019-06-12

本文共 3909 字,大约阅读时间需要 13 分钟。

 什么是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()        //该集合所有数据

 

转载于:https://www.cnblogs.com/MasterBai2018/p/9468780.html

你可能感兴趣的文章
更新.net core 3.0,dotnet ef命令无法使用的解决办法
查看>>
React躬行记(13)——React Router
查看>>
前端利器躬行记(1)——npm
查看>>
前端利器躬行记(2)——Babel
查看>>
前端利器躬行记(6)——Fiddler
查看>>
每次阅读外文技术资料都头疼,终于知道原因了。
查看>>
130242014034-林伟领-实验一
查看>>
Forbidden You don't have permission to access / on this server.
查看>>
Windows server 2008 R2中安装MySQL !
查看>>
Intellij Idea新建web项目(转)
查看>>
C语言结构体和函数
查看>>
用JAVA编写浏览器内核之实现javascript的document对象与内置方法
查看>>
linux 命令之top
查看>>
洛谷 [P3033] 牛的障碍
查看>>
centos iptables
查看>>
unity3d 移动与旋转 2
查看>>
寻找二叉查找树中比指定值小的所有节点中最大的那个节点
查看>>
如何设置输入框达到只读效果
查看>>
RT3070 USB WIFI 在连接socket编程过程中问题总结
查看>>
MIS外汇平台荣获“2013年全球最佳STP外汇交易商”
查看>>