如何在EJS文件中正确渲染MongoDB Schema嵌套数组的对象属性
错误写法原因
你的代码无法正确渲染的核心是对数据结构理解有误,几个错误点如下:
user.shoppingcart本身是数组类型,不是对象,不能直接通过.productname访问内部属性,必须先指定数组下标拿到对应购物车条目对象user.shoppingcart.["productname"][0]存在语法错误,属性访问时点运算符和中括号运算符不能混用- 第三种写法同样跳过了
shoppingcart数组的下标访问,无法定位到具体购物车条目
单条数据渲染写法
如果你要取第一条购物车条目的第一个商品名,正确写法如下:
<%= user.shoppingcart[0].productname[0] %>
按索引层级逐层访问即可:用户对象 -> 购物车数组第N项 -> 商品名数组第M项
全量购物车数据遍历写法
通常购物车会有多条条目,每个条目下有多个商品,建议用嵌套循环渲染全量数据:
<!-- 遍历所有购物车条目 --> <% user.shoppingcart.forEach(cartItem => { %> <!-- 遍历当前购物车条目下的所有商品 --> <% for (let i = 0; i < cartItem.productname.length; i++) { %> <div class="cart-product"> <p>商品名称:<%= cartItem.productname[i] %></p> <img src="<%= cartItem.productimage[i] %>" alt="<%= cartItem.productname[i] %>"> <p>商品单价:<%= cartItem.productprice[i] %></p> <p>购买数量:<%= cartItem.Productamount[i] %></p> </div> <% } %> <% }) %>
Schema优化建议(可选)
你当前的Schema用四个并行数组存储商品信息,很容易出现索引不匹配导致的数据错乱问题,建议调整为嵌套对象结构,后续取值和维护都更方便:
shoppingcart: [{ products: [{ productname: String, productimage: String, productprice: Number, Productamount: Number }] }]
内容的提问来源于stack exchange,提问作者SpringerJerry
相关产品推荐
相关产品推荐

