在node.js中有个专门处理与数据库连接操作的模块mongodb,由于这个模块只是对mongodb的操作做了一层浅封装,用起来不是很好用。如是出现了一个开源的第三方模块mongoose,mongoose是建立在mongodb基础之上的一个比mongodb更好用的模块。
Mongoose是mongoose模块的入口类,它做了以下几件事情:
1.暴露内部模块,其实就是把它内部的很多模块集中起来,而Mongoose类作为外部访问它内部模块的统一接口。
2.创建连接并把所有的连接都放到一个connections集合里面。
3.定义模型并放到models集合里面,模型是mongoose操作数据库中的集合的最基本单元,注意这里是对模型的声明而不是定义。
4.声明并注册外部插件,存储的位置是plugins集合。
构造:
function Mongoose () { this.connections = []; this.plugins = []; this.models = {}; this.modelSchemas = {}; // default global options this.options = { pluralization: true }; var conn = this.createConnection(); // default connection conn.models = this.models; };
构造注意是定义一些容器,然后就是创建一个默认的连接对象,这个连接对象就是我们经常用到的connect方法进行连接的时候用到的对象。由此可见连接对象是可以先创建再连接的。
创建连接:
Mongoose.prototype.createConnection = function () { var conn = new Connection(this); this.connections.push(conn); if (arguments.length) { if (rgxReplSet.test(arguments[0])) { conn.openSet.apply(conn, arguments); } else { conn.open.apply(conn, arguments); } } return conn; }; Mongoose.prototype.connect = function () { var conn = this.connection; if (rgxReplSet.test(arguments[0])) { conn.openSet.apply(conn, arguments); } else { conn.open.apply(conn, arguments); } return this; }; Mongoose.prototype.disconnect = function (fn) { var count = this.connections.length , error this.connections.forEach(function(conn){ conn.close(function(err){ if (error) return; if (err) { error = err; if (fn) return fn(err); throw err; } if (fn) --count || fn(); }); }); return this; };
真正建立连接的行为是在Connection内部发生的,这里只是把参数传进去了。还有就是这里的disconnect是断开所有连接,要想断开单个连接直接用Connection对象就行了。要想把connections当做连接池估计还得自己做些处理。
暴露给外部的子模块:
Mongoose.prototype.Collection = Collection; Mongoose.prototype.Connection = Connection; Mongoose.prototype.version = pkg.version; Mongoose.prototype.Mongoose = Mongoose; Mongoose.prototype.Schema = Schema; Mongoose.prototype.SchemaType = SchemaType; Mongoose.prototype.SchemaTypes = Schema.Types; Mongoose.prototype.VirtualType = VirtualType; Mongoose.prototype.Types = Types; Mongoose.prototype.Query = Query; Mongoose.prototype.Promise = Promise; Mongoose.prototype.Model = Model; Mongoose.prototype.Document = Document; Mongoose.prototype.Error = require('./error'); Mongoose.prototype.mongo = require('mongodb'); Mongoose.prototype.mquery = require('mquery');
好多,以后慢慢看
相关推荐
Mongoose是一个轻量化的web服务器,通过提供一个web接口给它,它可以嵌入到现有的工程当中。Mongoose的整个代码只有一个c文件和一个h文件,使用起来非常方便。 c++ http通讯 基于mongoose 的httpserver和httpclient...
mongoose 各个版本从mongoose-3.2.tar.gz到mongoose-6.13.tar.gz 轻量 特别适合做嵌入式
Mongoose is easy to use web server. It also can be used as embedded web server library to provide web interface to applications. Mongoose executable does not depend on any external library or ...
mongoose v6.15版本,多线程http——server,自己从GitHub上下载的c源码,然后再vc6里面改成c++工程,线程数量可设
Mastering Mongoose Become a Full-Stack Mongoose Expert
使用mongoose实现了httpserver,httpclient,websocketserver
Mongoose Web Server是一款易于使用的Web服务器,它可以嵌入到其它应用程序中,为其提供Web接口
1、基于mongoose 6.7实现的http server 2、支持多线程(本项目使用vs2008编译) 3、附带mongoose6.7版本源代码,6.7以上的版本,多线程实现方式与现在不一样)
轻量级的web服务器,mongoose 里面有多个简单denmo 实际只需要将mongoose.c mongoose.h 加入到你的工程里即可 ,c/c++ 支持跨平台 windows linux macos stm32
最近在做一个项目涉及到mongoose的关联查询等等,之前做的mysql,postgresql比较多,而mongoose用的都是比较简单的存储数据,简单查询等等。 刚开始涉及ref还是有点小晕的,查询了相关资源,也可以模模糊糊做出来,...
mongoose-validator, mongoose模型的验证器利用 validator.js Mongoose验证器 的验证器使用了 validator.js 。Mongoose验证器仅仅返回Mongoose样式验证对象,这些对象利用 validator.js 进行数据验证。版本 1.0. x ...
mongoose-schema-extend, mongoose架构继承和鉴别器密钥扩展 mongoose-schema-extend实现架构继承和可选鉴别器键,用于存储集合中不同类型的相关文档,并以正确的模型类型获取它们。通知从 0.2.1版本mongoose-schema...
mongoose连接例子
mongoose教程,可以帮助你了解mongoose,mongoose教程,可以帮助你了解mongoose
mongoose source code and samples
mongoose单文件web服务器,windiow下运行,版本6.1
官网mongoose源代码
mongoose-auth, mongoose nodejs orm的用户认证插件 mongoose认证mongoose node.js orm的用户认证插件。通过授权策略,mongoose授权允许你以任意数量的方式支持授权。授权策略是如何授权用户的。 当前mongoose身份...
非常详细的高清 mongoose 中文教程 一步步教你如何使用