Getting Started
接下来使用npm
在命令行安装 Mongoose:
npm install mongoose --save
现在假设我们都很喜欢小猫咪,想在 MongoDB 中记录下我们遇到过的每只猫咪。
首先我们要在项目中引入 mongoose ,然后连接我们本地的 test
数据库。
// getting-started.js
const mongoose = require('mongoose');
main().catch(err => console.log(err));
async function main() {
await mongoose.connect('mongodb://127.0.0.1:27017/test');
// use `await mongoose.connect('mongodb://user:password@127.0.0.1:27017/test');` if your database has auth enabled
}
为简洁起见,现在我们假设接下来的代码都在 main
函数内。
Mongoose 中, 所有东西都由 摘要(Schema) 派生。
让我们看一个参考并定义我们的小猫。
const kittySchema = new mongoose.Schema({
name: String
});
非常棒。我们得到了拥有一个类别为 String
的属性 name
的 摘要(Schema)。下一步是把我们的 schema 编译为一个 模型(Model).
const Kitten = mongoose.model('Kitten', kittySchema);
模型是我们用于构造 document 的类。
在这个例子中,每个 document 都是一只小猫,它们都拥有我们在 schema 中声明的属性和行为。
让我创建一个小猫 document,来代表我们刚刚在外面的人行道上遇到的小家伙:
const silence = new Kitten({ name: 'Silence' });
console.log(silence.name); // 'Silence'
喵咪可以喵喵叫, 所以让我们瞧瞧如何为 documents 添加一个 add
方法:
// NOTE: methods must be added to the schema before compiling it with mongoose.model()
kittySchema.methods.speak = function speak() {
const greeting = this.name
? 'Meow name is ' + this.name
: 'I don\'t have a name';
console.log(greeting);
};
const Kitten = mongoose.model('Kitten', kittySchema);
被添加在 schema 中 methods
属性上的所有方法,将被编译到 Model
原型(prototype)上并会暴露给每个文档(documnet)实例:
const fluffy = new Kitten({ name: 'fluffy' });
fluffy.speak(); // "Meow name is fluffy"
我们拥有了会说话的猫咪!但是我们仍然没有往 MongoDB 中保存任何东西。
每个文档都可以通过调用其 save 方法被保存到数据库中。如果发生任何错误,回调的第一个参数将是错误。
await fluffy.save();
fluffy.speak();
假设时间流逝,我们想展示我们见过的所有小猫。
我们可以获取到所有的猫咪文档通过 Kitten model.
const kittens = await Kitten.find();
console.log(kittens);
我们刚刚将数据库中的所有小猫记录到控制台。如果我们想按名称检索我们的小猫,Mongoose 支持 MongoDB 丰富的 查询(querying)语法。
await Kitten.find({ name: /^fluff/ });
这将对具有以 ‘fluff’ 开头的 name 属性的所有文档执行搜索,并将结果作为猫咪数组返回给回调。
恭喜
我们快速入门到此结束。我们创建了一个摘要(schema),添加了自定义文档(document)方法,使用 Mongoose 在 MongoDB 中保存和查询了猫咪。前往 指南 或 API 文档 了解更多信息。