如何将多个嵌入式集合中的数据获取到 ejs 中?
Posted
技术标签:
【中文标题】如何将多个嵌入式集合中的数据获取到 ejs 中?【英文标题】:How to get the data from multiple embbedded collections into ejs? 【发布时间】:2021-07-15 02:15:59 【问题描述】:大家好,这个问题有点傻,但我是编程新手。所以我一直在为我的大学项目开发一个产品管理系统,使用 ejs、nodejs、express、mongoose、mongodb。所以我无法弄清楚如何获取类别标题而不是objectId。我尝试使用<td> <%= issue.product.category.title%></td>
,但它变成了空白。
图片供参考。
enter image description here
Ejs 代码。
<table class="table table-bordered">
<thead class="bg-dark text-center">
<tr class="text-white">
<th>Employee Name</th>
<th>Email</th>
<th>Employee Number</th>
<th>Contact Number</th>
<th>Product ID</th>
<th>Title</th>
<th>Manufacturer</th>
<th>Status</th>
<th>Category</th>
<th>Date/Time</th>
</tr>
</thead>
<tbody class="text-center">
<% if (issue.length> 0) %> <% issue.forEach(issue=> %>
<tr>
<td> <%= issue.ename %></td>
<td><%= issue.email %></td>
<td><%= issue.enumber %></td>
<td><%= issue.cnumber %></td>
<td><%= issue.product.prodid%></td>
<td><%= issue.product.title%></td>
<td><%= issue.product.manufacturer%></td>
<td><%= issue.product.status%></td>
<td> <%= issue.product.category%></td>
<td><%= issue.issueTime %> </td>
<% ) %> <% else %>
<p>There are no issue to display...</p>
<% %>
</tr>
</tbody>
</table>
问题模型
const issueSchema = new Schema(
ename:
type: String,
required: true
,
email:
type: String,
required: true
,
enumber:
type: String,
required: true
,
cnumber:
type: String,
required: true
,
desig:
type: String,
required: true
,
department:
type: String,
required: true
,
description:
type: String,
required: true
,
product:
type: mongoose.Schema.Types.ObjectId,
ref: 'Prodcut'
,
issueTime:
type: Date,
default: Date.now()
);
const Issue = mongoose.model('issue',issueSchema);
module.exports = 问题;
在这里,我嵌入了产品集合。
产品型号
const productSchema = new Schema(
prodid:
type: String,
required: true
,
title:
type: String,
required: true
,
manufacturer:
type: String,
required: true
,
category:
type: mongoose.Schema.Types.ObjectId,
ref: 'category'
,
status:
type: String,
default: 'In Stock'
,
coverImage:
type: Buffer,
required: true
,
coverImageType:
type: String,
required: true
, 时间戳:真 );
类别模型
const CategorySchema = new Schema(
title:
type: String,
required: true
, 时间戳:真 );
const Category = mongoose.model('category',CategorySchema);
module.exports = 类别;
现在这是我从中获取数据的 issueController。
const issue_detail = (req, res) =>
Issue.find().sort( createdAt: -1)
.populate('product category')
.then((issue) =>
res.render('products/issue/details',
issue: issue,
)
)
.catch((err) =>
console.log(err);
)
;
提前谢谢你!
【问题讨论】:
【参考方案1】:仅从代码中很难说。
console.log 你从数据库返回的内容会有所帮助,所以在 ejs 的头上只是 pus
<% console.log(issues) %>
这会将返回的对象显示到您的视图中,从那里您将看到返回的内容,然后您可以引用对象中的正确元素。
【讨论】:
【参考方案2】:const issue_detail = (req, res) =>
Issue.find().sort( createdAt: -1)
.populate(path : 'product', populate : path : 'category')
.then((issue) =>
res.render('products/issue/details',
issue: issue,
)
)
.catch((err) =>
console.log(err);
)
参考:http://mongoosejs.com/docs/populate.html#deep-populate
【讨论】:
以上是关于如何将多个嵌入式集合中的数据获取到 ejs 中?的主要内容,如果未能解决你的问题,请参考以下文章
使用 mongodb 和 nodejs 将多个集合发送到一个 ejs 文件
EJS:如何在 EJS 文件中呈现来自猫鼬的两个或多个填充集合
如何使用graphql将mongodb中多个集合中的数据传递到1个反应表
如何从 mongodb 获取数据并使用节点 js 将其显示在表中?