Mongoose是一个基于Node.js和MongoDB的高级ORM类库,是现代软件工程至关重要的一部分。
它能从数据库中提取出任何信息,且应用程序代码只通过对象以及它们的方法进行交互。ORM允许指定不同类型对象之间的关系,也允许将业务逻辑(与这些对象相关的)放入类中。另外,它拥有内置的验证和类型转换功能,而且可以根据需要扩展和定制。当与Express.js共用的时候,Mongoose使栈真正附着在MVC概念中。
7.1 安装Mongoose
$ npm install mongoose
7.2 用独立的Mongoose脚本创建数据库连接
连接服务器:mongoose.connect('mongodb://localhost/test');
创建模型:model()函数
var Book = mongoose.model('Book', { name: String });
var practicalNodeBook = new Book( { name: "Practical Node.js' });
文档对象:有内置方法,如validate, isNiew, update等
mongoose.js
var mongoose = require('mongoose');
mongoose.connect('mongoose://localhost/test');
var Book = mongoose.model('Book', { name: String });
var practicalNodeBook = new Book( { name: "Practical Node.js" });
practicalNodeBook.save(function (err, results) {
if (err) {
console.error(e);
process.exit(1);
} else {
console.log('Saved: ', results);
process.exit(0);
}
});
7.3 Mongoose的原型
原型是一个JSON格式的类。使用之前先定义book原型
7.4 使用钩子(Hook)保存代码的逻辑清晰
在复杂的、拥有很多相互关联对象的应用中,可能会在保存一个对象之前想执行某些特定的逻辑。Hooks正是存储这些逻辑的好地方。如保存book文档前上传一个PDF:
bookSchema.pre('save', function(next) { //上传PDF return next(); });
7.5 自定义静态和实例方法
bookSchema.method( { buy: function() { } } };
7.6 Mongoose的模型
模型都是最基础的对象。将原型编译为一个模型,使用mongoose.model(name, schema)即可
7.7 使用population建立关系和连接
MongoDB中是不存储关系数据的,但可以在应用层进行存储。
7.8 嵌套的文档
一个单独的集合(users)代替两个集合(posts和users),每一项都包含posts.
7.9 虚拟字段
用虚拟字段创建聚合字段是很不错的选择,如有姓和名字段不需要存储全名的值。
7.10 修改原型的行为
7.11 Express.js + Mongoose = 真正的MVC
P164