入门

首先确保您已安装 MongoDBNode.js

接下来,使用 npm 从命令行安装 Mongoose

npm install mongoose --save

现在假设我们喜欢毛茸茸的小猫,并且想要记录我们在 MongoDB 中遇到的每只小猫。我们要做的第一件事是在我们的项目中包含 mongoose 并打开连接到本地运行的 MongoDB 实例上的 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:[email protected]:27017/test');` if your database has auth enabled
}

为了简洁起见,假设所有以下代码都在 main() 函数中。

在 Mongoose 中,一切都源于 模式。让我们获取对它的引用并定义我们的小猫。

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

到目前为止一切顺利。我们有一个模式,它有一个属性 name,它将是一个 String。下一步是将我们的模式编译成一个 模型

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

模型是一个类,我们用它来构造文档。在本例中,每个文档都将是一只小猫,具有我们在模式中声明的属性和行为。让我们创建一个小猫文档,代表我们刚刚在外面人行道上遇到的那只小家伙

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

小猫会喵喵叫,所以让我们来看看如何为我们的文档添加“说话”功能

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

添加到模式 methods 属性中的函数将被编译到 Model 原型中,并在每个文档实例上公开

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

我们有会说话的小猫了!但我们还没有将任何东西保存到 MongoDB 中。每个文档都可以通过调用其 save 方法来保存到数据库中。回调的第一个参数将是任何发生的错误。

await fluffy.save();
fluffy.speak();

假设时间流逝,我们想要显示我们看到的所有小猫。我们可以通过我们的 Kitten 模型 访问所有的小猫文档。

const kittens = await Kitten.find();
console.log(kittens);

我们刚刚将数据库中所有的小猫记录到控制台。如果我们想按名称筛选小猫,Mongoose 支持 MongoDB 的丰富 查询 语法。

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

这将执行搜索所有具有以“fluff”开头的名称属性的文档,并将结果作为小猫数组返回给回调。

恭喜

这就是我们的快速入门教程的结尾。我们创建了一个模式,添加了一个自定义文档方法,使用 Mongoose 在 MongoDB 中保存和查询小猫。前往 指南API 文档 获取更多信息。