📜  在 mongoose 中填充示例 - Javascript (1)

📅  最后修改于: 2023-12-03 15:07:44.467000             🧑  作者: Mango

在 Mongoose 中填充示例 - JavaScript

Mongoose 是一个能够在 Node.js 环境和 MongoDB 数据库之间建立映射关系的对象模型工具。它可以帮助开发人员轻松地访问和操作 MongoDB 数据库中的数据。

Mongoose 的一项重要功能是填充(Population),它可以将一个文档中的引用字段(Reference Field)自动从另一个集合中获取相应的文档。在本文中,我们将介绍如何在 Mongoose 中填充示例。

准备工作

本文中的示例使用了 Node.js 和 MongoDB。在开始之前,请确保已经安装了这两个工具。

另外,我们还需要使用到以下的 Node.js 包:

  • mongoose:Mongoose 的 Node.js 官方驱动;
  • faker:一个可以生成随机数据的 Node.js 包。

请使用以下命令安装这些包:

npm install mongoose faker
创建模型

在本文中,我们需要创建两个模型:Author 和 Book。

// Author 模型
const mongoose = require('mongoose');

const authorSchema = new mongoose.Schema({
  name: String,
  age: Number,
});

const Author = mongoose.model('Author', authorSchema);

module.exports = Author;

// Book 模型
const mongoose = require('mongoose');
const Author = require('./author');

const bookSchema = new mongoose.Schema({
  title: String,
  author: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'Author',
  },
});

const Book = mongoose.model('Book', bookSchema);

module.exports = Book;

可以看到,Book 模型包含一个引用类型的 author 字段,用来存储其对应的作者文档的 _id。引用模型的名称为 Author,它需要在填充的过程中被解析。

填充

现在,我们已经创建了 Author 和 Book 模型。接下来,我们将使用 Mongoose 的 populate() 方法来填充 book 文档的 author 字段。

const mongoose = require('mongoose');
const Author = require('./models/author');
const Book = require('./models/book');
const faker = require('faker');

// 连接 MongoDB 数据库
mongoose.connect('mongodb://localhost:27017/test', {
  useNewUrlParser: true,
  useUnifiedTopology: true,
});

// 创建测试数据
const author = new Author({
  name: faker.name.findName(),
  age: faker.random.number(100),
});

const book = new Book({
  title: faker.lorem.words(),
  author: author._id,
});

// 保存测试数据
author.save((err) => {
  if (err) {
    console.error(err);
    return;
  }
  book.save((err) => {
    if (err) {
      console.error(err);
      return;
    }

    // 填充 author 字段
    Book.findById(book._id).populate('author').exec((err, bookWithAuthor) => {
      if (err) {
        console.error(err);
        return;
      }
      console.log(bookWithAuthor);
      mongoose.disconnect();
    });
  });
});

可以看到,我们使用 populate() 方法来填充 book 文档的 author 字段。在 populate() 方法中,我们传入 author 字段的名称,并使用 exec() 方法来执行填充操作。

结果

当我们运行上述代码时,可以看到控制台输出了填充过程的结果。找到填充过的书籍信息,会发现其 author 字段已经被自动填充了。

{
  _id: 5f9b8091d44d394510061dc1,
  title: 'nesciunt voluptates unde',
  author: { _id: 5f9b8091d44d394510061dc0, name: 'Elyse Morissette', age: 32 },
  __v: 0
}
总结

填充是 Mongoose 的一个很棒的功能,它可以将一个文档中的引用字段自动从另一个集合中获取相应的文档。在本文中,我们演示了如何在 Mongoose 中填充示例。如果你还没有尝试过这个功能,那么这是个绝佳的机会去体验一下。