mongoose入门

前面我们已经认识了Mongoose,也了解了MongoDB,回顾一下:MongoDB是一个对象数据库,是用来存储数据的;Mongoose是封装了MongoDB操作的一个对象模型库,是用来操作这些数据的。

好,下面我们就来进行操作数据的第一步吧。

准备

1、 安装mongoose

  1. $ npm install --save mongoose

2、 引用mongoose

  1. var mongoose = require("mongoose");

3、 使用”mongoose”连接数据库

  1. var db = mongoose.connect("mongodb://user:pass@ip:port/database");

说明

  • user 是mongodb里用户名
  • pass 是mongodb里用户对应的密码
  • ip 是mongodb服务器可以访问ip地址,比如本地为127.0.0.1
  • port 是mongodb服务器可以访问端口,默认是27017

测试

执行下面代码检查默认数据库test,是否可以正常连接成功?

  1. var mongoose = require("mongoose");
  2. var db = mongoose.connect("mongodb://127.0.0.1:27017/db_helloworld");
  3. db.connection.on("error", function (error) {
  4. console.log("数据库连接失败:" + error);
  5. });
  6. db.connection.on("open", function () {
  7. console.log("数据库连接成功");
  8. });

执行代码

  1. $ node book-source/db/helloworld/connect.js
  2. 数据库连接成功

当mongodb没有启动的时候会报错,当出现如下问题,请执行mhg启动mongodb即可

  1. $ node book-source/db/helloworld/connect.js
  2. 数据库连接失败:MongoError: connect ECONNREFUSED 127.0.0.1:27017

最小demo

这里给出极简demo,用于讲解mongoose从连接数据库到对数据库进行操作完整过程,这样更容易让读者了解核心原理,代码如下:

  1. // 1、引入`mongoose`模块
  2. var mongoose = require('mongoose');
  3. // 2、通过`mongoose.connect`连接mongodb数据库
  4. mongoose.connect('mongodb://127.0.0.1/db_helloworld');
  5. // 3、通过`mongoose.model`定义模型(model)
  6. var Cat = mongoose.model('Cat', { name: String });
  7. // 4、通过`new`关键字实例化Cat模型,参数是`{ name: 'Zildjian' }`,创建kitty对象
  8. var kitty = new Cat({ name: 'Zildjian' });
  9. // 5、执行`kitty.save`来保存到数据库
  10. kitty.save(function (err) {
  11. if (err) {
  12. console.log('save error:' + err);
  13. }
  14. console.log('save sucess');
  15. });

核心步骤说明

  • 定义模型(model)
  • 通过new关键字实例化Cat模型,创建kitty对象
  • 执行kitty.save来保存到数据库

这个其实就是mongoose最常见的用法,首先约定schema,即在模型model定义的时候指定字段和字段类型,避免乱用schema-free问题。之后对实例化模型创建的对象进行操作,完成我们常见的增删改查功能。

  1. 模型(model)定义即定义对象,对象操作即对数据库进行操作

执行如下

  1. $ node book-source/db/helloworld/helloworld.js

如无错误日志,即代表数据保存成功。此时打开robo mongodb客户端查看一下具体数据是否保存成功。

创建robo客户端连接

mongoose入门 - 图1

查看cat数据

mongoose入门 - 图2

如果有{ name: 'Zildjian' }记录的,即为正常。