javascript - 如何引用 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”。我如何显示这个?
谢谢 !
解决方案
你可以使用猫鼬的填充来做到这一点:
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>
);
}
推荐阅读
- amazon-web-services - 我应该用额外的字段扩展我的类型还是创建一个新类型?
- jquery - 在 mouseenter 上更改背景图像,然后返回到第一个图像
- r - 如何通过 R 中的 dplyr 将向量变异到数据帧中每一行的末尾?
- javascript - react中的动态表单如何更新react.js中的嵌套状态字段
- mysql - fabric-ca-server 使用 ssl 连接到 mysql
- android - setCustomView 不适用于 android studio 中的 tablayout
- javascript - 将动态创建的切片字符串与其他切片字符串进行比较达到限制?
- c++ - Opencv:相同的捕获代码在高端笔记本电脑上提供低 FPS,在 TX1 上提供高 FPS
- ruby - 抓取网页:需要数据分隔符
- asp.net - 中继器中的链接第一次仅在更新面板控件内工作