乐闻世界logo
搜索文章和话题

Mongoose 如何引用外部 model ?

4 个月前提问
3 个月前修改
浏览次数29

1个答案

1

在 Mongoose 中,如果您想要在一个模型中引用另一个模型,可以通过使用 MongoDB 的 ref 关键字来实现。这种方式通常用于建立模型间的关联,比如一对多或多对多关系。这里是一个具体的步骤和代码示例:

步骤

  1. 定义被引用的模型:首先,您需要有一个已经定义好的 Mongoose 模型,这个模型将被其他模型引用。

  2. 在引用模型中设置 Schema:在另一个模型的 Schema 定义中,用 ref 来指定要关联的模型的名称。

  3. 使用 populate 方法:在查询数据库时,使用 populate() 方法来填充关联的数据。

示例

假设我们有两个模型:一个是 User 用户模型,另一个是 Post 帖子模型,帖子模型将引用用户模型,以此来标识每个帖子的作者。

步骤 1: 定义 User 模型

javascript
const mongoose = require('mongoose'); const Schema = mongoose.Schema; const userSchema = new Schema({ name: { type: String, required: true }, email: { type: String, required: true } }); const User = mongoose.model('User', userSchema);

步骤 2: 定义 Post 模型,并引用 User

javascript
const postSchema = new Schema({ title: { type: String, required: true }, content: { type: String, required: true }, author: { type: Schema.Types.ObjectId, ref: 'User' } }); const Post = mongoose.model('Post', postSchema);

Post 模型中,author 字段被定义为一个 ObjectId,并且通过 ref 关键字指向了 User 模型。这表明每个 Post 文档的 author 字段将存储一个 User 文档的 ID。

步骤 3: 使用 populate

当您需要获取帖子及其作者的详细信息时,可以这样做:

javascript
Post.find().populate('author').exec((err, posts) => { if (err) throw err; console.log(posts); });

这段代码会查询所有的帖子,并且用相关的用户信息填充 author 字段,返回的 posts 数组中的每个帖子都会包含一个完整的用户对象而不仅仅是一个用户 ID。

通过这种方式,Mongoose 使得在文档间建立和操作关联变得简单直观。

2024年6月29日 12:07 回复

你的答案