Mongoose入门

简介

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有一些关键概念:

  1. Schema(模式): 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力
  2. Model(模型): Schema发布生成的模型,具有抽象属性和行为的数据库操作对
  3. Entity(实体): Model创建的实体,他的操作也会影响数据库

它们之间的关系是:Schema生成ModelModel创造EntityModelEntity都可对数据库操作造成影响,但ModelEntity更具操作性。

基本操作

创建连接

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

posted @ 2014-01-02 14:52  cubika  阅读(1044)  评论(0编辑  收藏  举报