原文(英)地址:http://mongoosejs.com/docs/in...

在确保你已经安装了MongoDB和Node.js后,可以使用如下的npm命令行安装mongoose:

$ npm install mongoose

现在假设我们钟情于毛绒小猫,想要把见过的每一只小猫都记录下来。那么我们要做的第一件事就是在项目中引入mongoose并用其连接到test数据库。

// getting-started.js
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');

刚才我们已经在本地向test这个数据库发起连接,接下来我们需要获取数据库连接成功或者失败的通知。

var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
  // we're connected! 连接成功
});

一旦连接上数据库,我们定义的回调函数就会被触发。为了简单起见,我们约定以下所有代码都将包含在回调函数内。
在Mongoose里,一切都源自于Schema,现在就让我们用它来定义我们的小猫(kittens)

var kittySchema = mongoose.Schema({
  name: String
});

到目前为止一切都很顺利,我们定义了一个拥有name属性(String类型)的schema。下一步就是将schema转换成Model

var Kitten = mongoose.model('Kitten', kittySchema);

Model是一个用于构造文档(documents)的类。在这个案例中,每一个文档(documents) 都会拥有schema的属性和行为。下面让我们创建一个小猫的文档,这个小家伙是我们在人行道上遇到的。

var silence = new Kitten({ name: 'Silence' });
console.log(silence.name); // 'Silence'

小猫是会叫的,那么让我们看看如何在文档(documents) 里添加说话的功能:

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);

方法被添加到schema的methods属性中并被编译成Model,随后暴露给每一个文档的实例:

var fluffy = new Kitten({ name: 'fluffy' });
fluffy.speak(); // "Meow name is fluffy"

现在我们已经拥有了会说话的小猫们,但是我们依旧没有在MongoDB中保存任何相关数据。在这里我们可以通过触发save方法来保存每一个文档,需要提及的是回调函数中的第一个参数是错误信息。

fluffy.save(function (err, fluffy) {
    if (err) return console.error(err);
    fluffy.speak();
  });

随着时间的流逝,我们想获取所有我们见过的小猫信息,此时我们可以通过kitten model来获取相关信息

Kitten.find(function (err, kittens) {
  if (err) return console.error(err);
  console.log(kittens);
})

现在我们已经打印出所有小猫的信息,但是如果我们想要过滤出某一特定名字的小猫,Mongoose是支持MongoDB丰富的查询语法的。

Kitten.find({ name: /^fluff/ }, callback);

这将查询所有文档并获取以‘fluff’名称开头的小猫,而后返回一个数组传递给指定的回调函数。

结语
在这篇文章中,我们创建了schema,自定义了一个文档方法,使用Mongoose保存并且查询了数据库中的小猫信息。如想获取更多详细信息,请前往指南或者Api文档。
注:如果反馈良好,我将继续翻译moogoose官方指南


superTerrorist
468 声望864 粉丝

在写bug的路上渐行渐远。。。


引用和评论

0 条评论