简介
Mongoose是MongoDB的对象模型工具。nodejs和mongodb结合的主要原因是有相同的数据存储格式JSON,在应用层使用具有非常好的连续性,无需太多的代码用来进行数据转换等工作。
就像PHP和JAVA连接Mysql一样,nodejs连接mongodb也需要有驱动driver。mongodb的driver还是有一些的,其中最著名的就是native driver: https://github.com/mongodb/node-mongodb-native, 该项目由mongodb的创建公司10gen进行维护,它提供了一些基础的连接和数据操作的API。
今天我们说的mongoose其实是在mongodb-native之上的一个封装,使得我们对于数据的操作是建立在模型的基础上。Mongoose有一些关键概念:
- Schema(模式): 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力
- Model(模型): 由
Schema
发布生成的模型,具有抽象属性和行为的数据库操作对 - Entity(实体): 由
Model
创建的实体,他的操作也会影响数据库
它们之间的关系是:Schema
生成Model
,Model
创造Entity
,Model
和Entity
都可对数据库操作造成影响,但Model
比Entity
更具操作性。
基本操作
创建连接
var mongoose =require('mongoose');//引用mongoose模块 mongoose.connect('mongodb://localhost/test');//连接数据库 //或者 var db = mongoose.createConnection('localhost','test'); db.once('open',function(){ //一次打开记录 });
定义Schema
var userSchema = new mongoose.Schema({ name: { first: String, last: { type: String, trim: true } }, age: { type: Number, min: 0} });
将Schema发布为Model
var PUser = mongoose.model('PowerUsers', userSchema);
使用Model创建Entity
var johndoe = new PUser ({ name: { first: 'John', last: ' Doe ' }, age: 25 });
保存Entity到数据库
johndoe.save(function (err) {if (err) console.log ('Error on save!')});
查询
PUser.find({}).exec(function(err, result) { if (!err) { // handle result } else { // error handling }; });
查询的语法为:
Model.find(query, fields, options, callback);
其中 Model 为 Mongoose 模型对象。
query参数与 MongoDB 查询条件一致。
fields 指定查询的键。
options 选项,有 limit, skip, populate 等。
callback 则是回调函数,查询完毕后执行。该回调函数支持传入两个参数,分别为 err 和 result。
更多使用方法参考官方文档: http://mongoosejs.com/docs/guide.html