前面的话

 

  Mongoose是在node.js异步环境下对mongodb进行便捷操作的对象模型工具。本文将详细介绍如何使用Mongoose来操作MongoDB

 

NodeJS驱动

  在介绍Mongoose之前,首先介绍使用NodeJS操作MongoDB的方法

  如果使用程序操作数据库,就要使用MongoDB驱动。MongoDB驱动实际上就是为应用程序提供的一个接口,不同的语言对应不同的驱动,NodeJS驱动不能应用在其他后端语言中

  首先,安装mongodb

npm install mongodb
 

  接着,使用require()方法引入mongodb数据库;然后使用MongoClient对象的connect()方法连接mongodb;最后通过node来对mongodb进行异步的增删改查

  在mongodb数据库中建立db1数据库,然后通过以下代码,建立col集合,并插入{"a":1}文档

复制代码



var mongodb = require('mongodb');

mongodb.MongoClient.connect("mongodb://localhost/db1",function(err,db){

if(!err){

db.collection("col").insert({"a":1},function(err,result){

if(!err){

console.log(result);

}

})

}

})

复制代码

  最后返回结果如下



{ result: { ok: 1, n: 1 },

ops: [ { a: 1, _id: 597077dc271d092728caa362 } ],

insertedCount: 1,

insertedIds: [ 597077dc271d092728caa362 ] }

 

概述

  Mongoose是NodeJS的驱动,不能作为其他语言的驱动。Mongoose有两个特点

  1、通过关系型数据库的思想来设计非关系型数据库

  2、基于mongodb驱动,简化操作

  Mongooose中,有三个比较重要的概念,分别是Schema、Model、Entity。它们的关系是:Schema生成Model,Model创造Document,Model和Document都可对数据库操作造成影响,但Model比Document更具操作性

  Schema用于定义数据库的结构。类似创建表时的数据定义(不仅仅可以定义文档的结构和属性,还可以定义文档的实例方法、静态模型方法、复合索引等),每个Schema会映射到mongodb中的一个collection,Schema不具备操作数据库的能力

  Model是由Schema编译而成的构造器,具有抽象属性和行为,可以对数据库进行增删查改。Model的每一个实例(instance)就是一个文档document

  Document是由Model创建的实体,它的操作也会影响数据库

 

安装

  安装nodejsmongodb之后 ,使用npm来安装mongoose

npm install mongoose
 

  安装成功后,就可以通过 require('mongoose') 来使用

 

连接数据库

  使用require()方法在项目中包含mongoose后,接下来使用connect()方法连接到MongoDB数据库

【connect()】

mongoose.connect(url);
 

  connect()最简单的使用方式,就是只要传入url参数即可,如下所示。连接到本地localhost的db1服务器

mongoose.connect('mongodb://localhost/db1');
 

  如果还需要传递用户名、密码,则可以使用如下方式

mongoose.connect('mongodb://username:password@host:port/database?options...');
 

  connect()方法还接受一个选项对象options,该对象将传递给底层驱动程序。这里所包含的所有选项优先于连接字符串中传递的选项

mongoose.connect(uri, options);
 

  可用选项如下所示

复制代码



db -数据库设置

server -服务器设置

replset -副本集设置

user -用户名

pass -密码

auth -鉴权选项

mongos -连接多个数据库

promiseLibrary
 

复制代码

复制代码



var options = {

db: { native_parser: true },

server: { poolSize: 5 },

replset: { rs_name: 'myReplicaSetName' },

user: 'myUserName',

pass: 'myPassword'

}

mongoose.connect(uri, options);

复制代码

  如果要连接多个数据库,只需要设置多个url以,隔开,同时设置mongos为true



mongoose.connect('urlA,urlB,...', {

mongos : true

})

  connect()函数还接受一个回调参数



mongoose.connect(uri, options, function(error) {



});
 

   执行下列代码后,控制台输出“连接成功”

复制代码



var mongoose = require('mongoose');

mongoose.connect("mongodb://localhost/test", function(err) {

if(err){

console.log('连接失败');

}else{

console.log('连接成功');

}

});
 

复制代码

   如果开启鉴权控制,以用户名"u1",密码"123456"登录'db1'数据库。执行代码后,控制台输出“连接成功”

复制代码



var mongoose = require('mongoose');

mongoose.connect("mongodb://u1:123456@localhost/db1", function(err) {

if(err){

console.log('连接失败');

}else{

console.log('连接成功');

}

});

复制代码

【disconnect()】 

mongoose.disconnect()
 

   使用disconnect()方法可以断开连接

复制代码



var mongoose = require('mongoose');

mongoose.connect("mongodb://u1:123456@localhost/db1", function(err) {

if(err){

console.log('连接失败');

}else{

console.log('连接成功');

}

});

setTimeout(function(){

mongoose.disconnect(function(){

console.log("断开连接");

})

}, 2000);
 

复制代码

学完还想练?点这里!