自翻译mongoose官方 Getting Started 文档,转载请著名出处。
快速开始
带你用最快的速度简单的了解mongoose的用法。
使用之前请确定已安装mongoDB和nodejs。
然后,安装mongoose:
npm install mongoose
引入
var mongoose = require('mongoose')
mongoose.connect('mongodb://localhost/test') //用mongoose连接数据库
错误捕获和连接成功:
var db = mongoose.connection;
//捕获错误
db.on('error',console.error.bind(console,'connection wrong'));
//连接第一次建立时触发的回调函数
db.once('open',function(){
console.log('success')
})
Schema
在mongoose里,一切都派生自Schema
。下面是一个schema创建的实例
var kittySchema = mongoose.Schema({
name: String //data type is String
})
目前为止,我们在这个schema里创建了一个String
类型的name
属性。下面我们将把这个schema装载进一个Model
里
var Kitten = mongoose.model('Kitten',kittySchema)
Model
一个model就是一个构造类,每个类的实例都具有里面其在Schema里定义的属性和行为
//小猫实例
var silence = new Kitten({name:'Silence'})
console.log(silence.name) //'Silence'
在 kittySchema 添加一个方法,作用到所有类中
kittySchema.methods.speak = function(){
var greeting = this.name
? "meow nams is" + this.name
:"I don't have a name";
console.log(geeting)
}
var Kitten = mongoose.model('Kitten',kittySchema)
在这里,我们将这个方法添加到schema的methods
属性中,然后使用该schema的Model
都会继承这个方法
var fluffy = new Kitten({name:'fluffy'})
fluffy.speak() // meow name is fluffy
保存数据
但目前我们仍没有保存任何数据到MongoDB
数据库,现在我们可以在实例上调用save
方法,保存数据。
回调函数中的第一个参数,用来接收错误。
fluffy.save(function(err,fluffy){
if(err) return console.log(err)
fluffy.speak()
})
我们也可以获取存储的model实例
Kitten.find(function(err,kittens){
if(err) return console.log(err)
console.log(kittens)
})
如果我们想按照设定的条件查找,比如说根据猫咪的name属性查找
Kitten.find({name:flyffy},callback);
这个方法会返回一个kittens类里匹配该名字的数据。
Schema
写一个你自己的Schema
在mongoose里面,几乎是一切基于一个 schema 开始的。
//一个博客评论schema
var mongoose = require('mongoose')
var Schema = mongoose.Schema
var blogSchema = new Schema({
title: String,
author: String,
body: String,
comments: [{body: String, data: Date}],
data:{type: Date, default: Date.now},
hidden: Boolean,
meta: {
votes: Number,
favs: Number
}
})
创建一个model
//使用我们刚才创建的schema
var Blog = mongoose.model('Blog',blogSchema)
实例方法
文档(documents),内置有很多它自己的实例方法,我们也可以定义自己的方法。
var animalSchema = new Schema({ name: String, type: String})
//编写自己的方法,基于schema上
animalSchema.methods.findSimilarTypes = function(cb){
return this.model('Animal').find({type:this.type},cb)
}
现在所有的 animalSchema 实例都有这个方法了
Statics
添加一个静态方法到model里。
//继续使用上面的animalSchema
animalSchema.statics.findByName = function (name,cb){
return this.find({name: new RegExp(name,'i')}, cb)
}
var Animal = mongoose.model('Animal',animalSchema);
Animal.findByName('fido',function(err,animals){
console.log(animals);
})