首页 > 解决方案 > 如何引用 mongoDB Schema 中的另一个字段而不是 ObjectID?

问题描述

我有两个模式:

const book = new mongoose.Schema({
  title: String
  pages: Number
  description: String
  author: { type: mongoose.Schema.Types.ObjectId, ref: 'Author' }
}

const Book = mongoose.model('Book', BookSchema)

const Author = new mongoose.Schema({
  name: String
  age: Number
  countryBorn: String
}

const Author = mongoose.model('Author', AuthorSchema)

调用 API 后,我想显示 Book Schema 中的数据列表。例如:

function Book(book){
  const {title}, {pages}, {descritpion}, {author} = book; 
  return (
    <h1> {title} <h1>
    <p>{pages} , {description}<p>
    <p>{author}<p> 
    );
  }

对于 {author} 部分,当前显示的是 ObjectID“61422843cf091092020”,但我希望显示作者的姓名,例如“Samuel”。我如何显示这个?

谢谢 !

标签: javascriptnode.jsreactjsmongodbmongoose

解决方案


你可以使用猫鼬的填充来做到这一点:

Book.
  findOne({ ... }).
  populate('author').
  exec(function (err, book) {
    if (err) return handleError(err);
    // book.author will now be populated
  });

然后,在反应中,您可以访问author对象上的 name 属性:

function Book(book){
  const {title}, {pages}, {descritpion}, {author} = book; 
  return (
    <h1> {title} <h1>
    <p>{pages} , {description}<p>
    <p>{author.name}<p> 
    );
  }

推荐阅读