在上两篇文章中,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的关系
- mongoose 自己有一套风格和api
- mongoose内部的还是使用mongodb的官方驱动,去操作mongo数据库的。
- mongoose 的schema: 结构,描述某种数据中有哪些字段、每个字段是什么类型、每个字段的约束等
使用方式
既然是一个驱动,那肯定是需要安装的,安装的方式也是很简单,如: npm install mongoose or yarn add mongoose等
环境要求
安装好驱动后,你需要保证你本地是有已经启动mongo服务的。检测方式如下: win + r —> 输入 services.msc
这个服务需要启动着,才能使用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('能够正常访问数据库') }); 复制代码
如果你的服务没有启动,那么你会得到下面的结果:
正常的结果是这样的:
通过上面的代码,大家和我可能都会有一个问题,为啥mongoose中连接数据库,不需要用户名和密码呢?数据库我们知道是动态创建的,但是用户名和密码是怎么一回事呢?带着问题往下看:
我带着这个问题去百度了下,加上自己对这方面的理解,得出了下面结论。 mongo 本身的数据库都是动态的,人家根本就不知道你连接的是哪台数据库,自然在权限方面肯定就是空的,怎么体现呢?如下:
在robot 3t 上可以看到权限中的用户名和密码都是空的呢,只要你启动了服务,那么你就可以任意的创建数据库,任意的操作数据。这个是不是有点尴尬呀!所以在正式的开发中,一定切记需要做好数据权限问题,不然每个人都可以操作数据库,这是一件很危险的事情。