大前端

前端学习之家-大前端

mongo 进阶之—— mongoose 认识

在上两篇文章中,mongo 进阶之——聚合管道, mongo 的安装与基本的认识, 中介绍了mongo的基本用法,但是我们在node环境中直接使用原生的,还是没有很方便。

使用mongo

不管是哪种代码的环境,如果需要连接数据库,都需要使用数据库的驱动。(以下代码的环境是node为例)。在node环境中,mongodb的驱动就叫做mongodb,但是这个驱动也有一个缺陷,模型的验证做的不是很好,一般我们都会使用mongoose 这个库来自定模型,验证参数

mongoose官网:mongoosejs.com/

mongoose民间中文网:www.mongoosejs.net/

mongoose

mongoose 在node环境中类似于连接MySQL的se’sequelize` 都是用于定义模型,校验规则是否满足条件,然后在把模型映射到对应的数据库中。

mongoose 与 mongodb的关系

image-20200601150124530

  • mongoose 自己有一套风格和api
  • mongoose内部的还是使用mongodb的官方驱动,去操作mongo数据库的。
  • mongooseschema: 结构,描述某种数据中有哪些字段、每个字段是什么类型、每个字段的约束等

使用方式

既然是一个驱动,那肯定是需要安装的,安装的方式也是很简单,如: npm install mongoose or yarn add mongoose

环境要求

安装好驱动后,你需要保证你本地是有已经启动mongo服务的。检测方式如下: win + r —> 输入 services.msc

image.png

这个服务需要启动着,才能使用mongoose 来连接,并且操作数据库。

连接数据库

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/test1');
var db = mongoose.connection;
db.on('error', function(){
  console.log('连接失败,请查看mongo服务是否启动')
});
db.on('open', function() {
  console.log('能够正常访问数据库')
});
复制代码

如果你的服务没有启动,那么你会得到下面的结果:

image.png

image.png

正常的结果是这样的:

image.png

image.png

通过上面的代码,大家和我可能都会有一个问题,为啥mongoose中连接数据库,不需要用户名和密码呢?数据库我们知道是动态创建的,但是用户名和密码是怎么一回事呢?带着问题往下看:

我带着这个问题去百度了下,加上自己对这方面的理解,得出了下面结论。 mongo 本身的数据库都是动态的,人家根本就不知道你连接的是哪台数据库,自然在权限方面肯定就是空的,怎么体现呢?如下:

image.png

在robot 3t 上可以看到权限中的用户名和密码都是空的呢,只要你启动了服务,那么你就可以任意的创建数据库,任意的操作数据。这个是不是有点尴尬呀!所以在正式的开发中,一定切记需要做好数据权限问题,不然每个人都可以操作数据库,这是一件很危险的事情。

发表评论:

Copyright Your WebSite.Some Rights Reserved.