如何将多个嵌入式集合中的数据获取到 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 将其显示在表中?

如何使用嵌入模式的express在猫鼬中传递多个复杂查询以将其呈现为我的ejs文件

如何在挂载期间获取嵌套子组件中的 div - Vue.js