循环访问具有子数组的embedded式文档,并将其显示在EJS文档上

我的目标是,我试图通过一个embedded的文档循环显示他们相同的ID职位的评论。

这是我在node.js服务器中的Schema结构:

var postSchema = new mongoose.Schema({ name: String, post: String, comment: [ { commentname: String, comment: String } ] }); 

以下是我如何收到添加注释到具有当前ID的post:

 app.post('/comment/:id', function(req, res) { console.log(req.body); var comments = { commentname: req.body.name, comment: req.body.comment } Posts.update({_id: req.params.id}, {$push: {comment: comments}}, {safe: true, upsert: true}, function(err, comments){ if (err) { console.log("Issue with adding a comment"); res.redirect('/'); } else { console.log("Success Adding Comments"); res.redirect('/'); } }); }); 

这是我如何显示主页上的所有post和评论:

 app.get('/', function(req, res) { Posts.find({}, function(err, posts) { if (err) { console.log('Issue receiving posts'); } else { console.log('Receiving Posts Success'); res.render("index", {posts: posts}); } }); }); 

这是我的EJS文件的样子:

  <% for (index in posts) { %> <div class="posts"> <h3>Name: <%= posts[index].name %></h3> <h3>Message: <%= posts[index].post %></h3> <div class="comment"> <h3 class="text-underline"><i>Post a Comment: </i></h3> <div class="comments"> <p>Name: Jimmy</p> <p>Comment: I agree, the codingdojo is pretty swell</p> </div> <div class="comments"> <p>Name: Bob</p> <p>Comment: Why aren't you guys working?</p> </div> <form action="/comment/<%= posts[index]._id %>" method="post"> <label for="name" style="display: block">Name: </label> <input type="text" name="name" id="name"> <br /> <label for="comment">Message: </label> <textarea name="comment" id="comment" class="form-control"></textarea> <button class="btn btn-info pull-right">Post Comment</button> </form> </div> </div> <% } %> 

我很难搞清楚如何在post中添加一个嵌套的循环,并显示属于该post的具体评论。

不过,我可以通过以下方式访问属于post的名称和评论:

 <%= console.log(posts[0].comment[0].commentname) %> <%= console.log(posts[0].comment[0].comment) %> 

我很困惑我将如何在post内添加一个嵌套的循环,以便只显示属于该特定post的评论和名称。 我目前有虚拟文本的地方的评论是假设去一个例子。

*更新*

这是我到目前为止:

  <% for (index in posts) { %> <div class="posts"> <h3>Name: <%= posts[index].name %></h3> <h3>Message: <%= posts[index].post %></h3> <div class="comment"> <h3 class="text-underline"><i>Post a Comment: </i></h3> <% if (posts[index].comment != 'undefined') { %> <% for (commentindex in posts[index].comment) { %> <div class="comments"> <p>Name: <%= posts[index].comment[commentindex].commentname %></p> <p>Comment: <%= posts[index].comment[commentindex].comment %></p> </div> <% } %> <% } %> 

这是打印在正确的职位,这是我想要的评论,但现在它打印了很多未定义的地方没有。 例如,这是页面上的内容:

名称:维多利亚消息:午餐什么时候到?

发表评论:

名字:戴安娜

评论:嘿,最近怎么样?

名字:Robby

评论:闭嘴!

名字:弗兰基

评论:嘿,我需要和你谈谈!

名称:未定义

评论:未定义

名称:未定义

评论:未定义

名称:未定义

评论:未定义

名称:未定义

评论:未定义

名称:未定义

评论:未定义

名称:未定义

评论:未定义

名称:未定义

评论:未定义

名称:未定义

 <% for (index in posts) { %> <div class="posts"> <h3>Name: <%= posts[index].name %></h3> <h3>Message: <%= posts[index].post %></h3> <div class="comment"> <h3 class="text-underline"><i>Post a Comment: </i></h3> <% for (commentindex in posts[index].comment) { %> <div class="comments"> <p>Name: <%= posts[index].comment[commentindex].commentname %></p> <p>Comment: <%= posts[index].comment[commentindex].comment %></p> </div> <% } %> <form action="/comment/<%= posts[index]._id %>" method="post"> <label for="name" style="display: block">Name: </label> <input type="text" name="name" id="name"> <br /> <label for="comment">Message: </label> <textarea name="comment" id="comment" class="form-control"></textarea> <button class="btn btn-info pull-right">Post Comment</button> </form> </div> </div> <% } %> 

在这里,您可以访问属于post的名称和评论,因为循环在post循环内。