mongoose入门(一)

http://www.html-js.com/article/Mongoose-based-mongoose-entry-a

Mongoose是一个提供了MongoDB地相映射的Node.js库,它在Node.js中与ORM(Object Relational Mapping)有着类似的接口。如果你不熟悉ORM或者Mongoose中的Object Data Mapping(ODM),意思是Mongoose将数据库中的数据转换为JavaScript对象以供你在应用中使用。我们现在就来看看怎样是使用Mongoose来创建并存储数据。

注意:使用Mongoose的前提是你已经安装了Node.js和MongoDB。运行下面的例子首先需要启动MongoDB。

连接到MongoDB

在本文中,我们将连接到MongoDB的test数据库。我们也要确保任何发生的错误都被打印到控制台中。注意open事件的使用 – 当你创建一个模式以及编译模型时该事件发生。

var mongoose = require("mongoose");

var db = mongoose.connection;    

db.on('error',console.error);
db.once('open',function(){
    //在这里创建你的模式和模型
});   

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

模式和模型

在一开始,我们需要一个模式和一个模型来将数据永久的保存在MongoDB数据库中。模式定义了一个集合中文档的结构,模型被用来创建将要存储在文档中的数据实例。我们将会创建一个电影数据库来保持追踪看看哪一步电影拥有credit cookies。我们先来创建一个电影的模式和模型:

var movieSchema = new mongoose.Schema({
    title: {type: String},
    rating: String,
    releaseYear: Number,
    hasCreditCookie: Boolean
});   

//使用movieSchema作为结构编译一个'Movie'模型    
//Mongoose同时也会创建一个叫做'Movie'的MongoDB集合用来存放这些文档  

注意到Movie模型是首字母大写的,这是因为当一个模型被编译时,结果是一个用来创建实例的构造函数。从模型构造函数创建的实例都是即将保存在Mongo中的文档。

创建,提取,更新和删除(CRUD)

创建一个新的电影文档非常的轻松,因为你已经定义了模型,只需要实例化一个Movie模型即可。更新和存储也同样简单,进行更改然后调用你的文档中的save函数。

var thor = new Movie({
    title: 'Thor',
    rating: 'PG-13',
    releaseYear: '2011',   //注意我们在这里使用一个字符串而不是一个数字 -- Mongoose会为我们自动转换     
    hasCreditCookie: true
});    

thor.save(function(err,thor){
    if(err) return console.log(err);
    console.dir(thor);
});  

save函数将会提供最新创建的文档,你可以在控制台中看到结果:

{
  "title": "Thor",
  "rating": "PG-13",
  "releaseYear": 2011,
  "hasCreditCookie": true,
  "_id": "519a979e918d4d0000000001",
  "__v": 0
}    

从已有的文档中提取数据需要用一种不同的方法。你可以依据模式的任何属性来查找文档并且找到任何数量的文档 – 使用findOne来将结果范围缩小到一个文档。

//通过名字查找一部电影
Movie.findOne({title: 'Thor'},function(err,thor){
    if(err) return console.err(err);
    console.dir(thor);
});

//查找所有电影    
Movie.find(function(err,movies){
    if(err) return console.err(err);
    console.dir(movies);
});    

//查找所有具有一个credit cookie的电影    
Movie.find({hasCreditCookie: true}, function(err,movies){
    if(err) return console.error(err);
    console.dir(movies);
});

Mongoose也允许你轻松的创建静态辅助函数来查找数据:

    movieSchema.statics.findAllWithCreditCookies = function(callback){
        return this.find({ hasCreditCookie: true}, callback);
    };

//只用这个副主函数作为编译的Movie模型的一个静态函数   

Movie.findAllWithCreditCookies(function(err,movies){
    if(err) return console.error(err);
    console.dir(movies);
});   

Mongoose使MongoDB中的CRUD操作变得异常的简单。同Express一起,你可以创造出令人惊讶的web应用。


本文译自getting started with mongoose,原文地址http://blog.modulus.io/getting-started-with-mongoose

本站专栏文章皆为原创,转载请注明出处(带有 前端乱炖 字样)和本文的显式链接( http://www.html-js.com/article/1697 ),本站和作者保留随时要求删除文章的权利!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值