本人编译官方教程部分内容,括号中内容为个人见解,转载请注明出处,谢谢
开始
- 首先得确认你已经安装了 Mongodb 和 Node.js
- 接着使用命令行工具 npm 安装 mongoose
$ npm install mongoose
- 现在我们想模糊 kittens 且记录每一个我们曾经在 mongoDB 中遇到的 kittens. 首先我们要做的是将 mongoose 导入我们的项目,并且建立一个与本地运行的 mongodb 数据库连接的 connect .
// getting-started.js
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
(在入口文件中引入mongoose)
- 我们将有一个与运行在localhost的测试数据库的连接过程。那么我们现在需要得到一些关于连接成功或失败的消息。
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function (callback) {
// yay!
});
- 一旦我们的连接打开,回调将会启用。为了方便起见,我们假定所有的代码都在此回调中。
◆◆◆ - 在 mongoose 中,一切来自于 Schema(模式)。让我们参考一下并且定义我们的 kittens.
var kittySchema = mongoose.Schema({
name: String
})
- 到目前还好!我们已经获得了一个带有 string 类型的属性的 schema .下一步是将我们的 schema 转化成一个 model.
var Kitten = mongoose.model('Kitten', kittySchema)
- model 就是一个可以创建文件的类。在这个案列中,我们 schema 中每一个 document 都将成为一个带有多个属性和行为的kitten。接下来让我们创造一个kitten实例。
var silence = new Kitten({ name: 'Silence' })
console.log(silence.name) // 'Silence'
我们看看如何增加一个 speak 功能到我们的 document 中去
// NOTE: methods must be added to the schema before compiling it with mongoose.model()
kittySchema.methods.speak = function () {
var greeting = this.name
? "Meow name is " + this.name
: "I don't have a name"
console.log(greeting);
}
var Kitten = mongoose.model('Kitten', kittySchema)
◆◆◆
(◆◆◆之间的内容应该写在一个model类型的js文件中)
- function 增加了 schema 编译 model 原型的方法属性并且暴露每个 document 实例。
var fluffy = new Kitten({ name: 'fluffy' });
fluffy.speak() // "Meow name is fluffy"
(这部分内容应于路由的回调中定义)
- 我们到目前为止仍然没有保存任何东西到 Mongodb 中去。每个 document 可以通过调用其 save 方法保存到数据库中。如果没有任何东西产生,那么第一个 argument 的回调将会是一个 error。
fluffy.save(function (err, fluffy) {
if (err) return console.error(err);
fluffy.speak();
});
- 随着时间的过去,我们想展示我们曾经见过的所有 kittens ,通过Kitten model 便可以进入到所有的 kitten 中去。
Kitten.find(function (err, kittens) {
if (err) return console.error(err);
console.log(kittens)
})
- 我们刚刚只是在控制台上打印了所有 kitten .如果想要过滤一些 kittens 的名字, mongoose 支持 mongodbs 丰富的查询语法
Kitten.find({ name: /^Fluff/ }, callback)
- 这里展示对所有 document 的一个 name 属性的搜索并且返回相关的结果到回调中去。
Congratulations
到这里我们的 quick start 就结束了。我们创建了一个 schema ,增加了个人的 document 方法,并且使用 mongoose 保存查询了在 mongodb 中的 kittens .前往guide 和api 文档了解更多!
Schemas
- 如何你还没有开始项目,请花一分钟的时间阅读上文的‘开始’以便对 mongoose 如何工作有一个大概的了解。如果2.x迁移到3.x,请花点时间阅读一下 迁移指导
定义你的 schema
- mongoose 的开始源于一个 Schema. 每一个 schema 连接到 Mongodb 并且定义其
documents 模型
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var blogSchema = new Schema({
title: String,
author: String,
body: String,
comments: [{ body: String, date: Date }],
date: { type: Date, default: Date.now },
hidden: Boolean,
meta: {
votes: Number,
favs: Number
}
});
如果你之后想增加额外的 keys ,请使用 schema#add 方法
我们 blogSchema 中的每个 key 在 document 中定义了一个转化为与其相关的 SchemaType 的方法。例如。我们定义了一个被转化为字符串 SchemaType 的‘title’以及一个被转化为 Data SchemaType 的 'date'。keys 也可以为包含更多内部key的对象,如例子中的 meta 。
SchemaTypes 有:
- String
- Number
- Date
- Buffer
- Boolean
- Mixed
- ObjectId
- Array
Schemas 不仅定义了你 document 的结构和属性,而且定义了 document 的实例方法,静态 model 方法,复合索引以及被称为中间件的生命周期钩子函数。
创建一个 model
在使用schema 之前,我们需要将 blogSchema 转化成一个我们可以操作的 model,我们通过 mongoose.model(modelName, schema)
转化它
var Blog = mongoose.model('Blog', blogSchema);
// ready to go!
网友评论