Node.js Expressjs基于参数检索集合

Node.js Expressjs基于参数检索集合,node.js,express,routes,mongoose,Node.js,Express,Routes,Mongoose,我试图根据视图中某个架构属性的参数请求循环数据库集合。我的模式中有一个tags属性,该属性保存为数组。我希望能够做到的是单击保存到该数组中的一个值,这将呈现一个包含所选标记值的集合的页面。我已经能够创建路由,它会将我指向单击的单个标记,但我收到一个标记:[xxx,xxx,xxx]没有方法。forEach。当我在视图中调用我的循环时会发生这种情况。为什么会这样?我应该如何解决 错误消息: TypeError: /Users/user/Desktop/Projects/node/blog/views

我试图根据视图中某个架构属性的参数请求循环数据库集合。我的模式中有一个
tags
属性,该属性保存为数组。我希望能够做到的是单击保存到该数组中的一个值,这将呈现一个包含所选标记值的集合的页面。我已经能够创建路由,它会将我指向单击的单个标记,但我收到一个
标记:[xxx,xxx,xxx]没有方法。forEach
。当我在视图中调用我的循环时会发生这种情况。为什么会这样?我应该如何解决

错误消息:

TypeError: /Users/user/Desktop/Projects/node/blog/views/pages/tag.ejs:15
   13| <div class="col-md-12">
   14| <h1><%= blogpost.tags %></h1>
>> 15| <% blogpost.forEach(function(blogpost) { %>
   16| <%= blogpost.title %>
   17| <% }); %>
   18| </div>

Object { _id: 54c7bd20c58f389232000001,
 category: 'Analytics/SEO/SEM',
 content: '',
 tagline: 'yep',
 author: 'Author',
 blogUrl: 'roger',
 featureImage: '/images/event-placeholder.png',
 title: 'Roger',
 __v: 0,
 date: Tue Jan 27 2015 11:29:48 GMT-0500 (EST),
 tags: [ 'wolf', ' cow', ' monkey' ] } has no method 'forEach'
以下是我如何在我的路线内调用我的单独选择的标记(我的函数是否使用正确的参数调用方法?)

页面/标记视图文件:

<div class="container">
        <div class="col-md-12">
            <h1><%= blogpost.tags %></h1>
            <% blogpost.forEach(function(blogpost) { %>
                <%= blogpost.title %>
            <% }); %>
        </div>
    </div>

将mongo查询更改为:

  Blogpost.find(tagCriteria, function (err, blogpost) {
    if (err)
      res.sent(err);
    res.render('pages/tag', {
        blogpost : blogpost
    })
  })
注意:blogpost现在将是数组[],而不是对象{}

然后在你的翡翠中,做以下事情

<% blogpost.forEach(function(post) { %>
   <%= post.title %>
<% }); %>


因此,我只是尝试调用所有标签值与页面上显示的标签值相同的标题。如果我点击了一个标签,上面写着
wolf
,我想看到一个页面,显示标签值为
wolf
的所有帖子的标题。我将
.forEach
方法更改为循环,但现在我只收到一篇帖子,而不是所有包含该标记的帖子<代码>第一个问题是mongo查询调用findOne(),它返回单个文档。将查询更改为使用.find()方法:Blogpost.find(tagCriteria,您的第二个问题是,您的循环条件是Blogpost.title.length.title是一个字符串,因此您的循环在标题的长度上进行迭代,这是没有意义的。将findOne更改为find()后,“Blogpost”将成为一个数组,因此可以使用foreach循环。我已经修改了我的答案。
  Blogpost.find(tagCriteria, function (err, blogpost) {
    if (err)
      res.sent(err);
    res.render('pages/tag', {
        blogpost : blogpost
    })
  })
<% blogpost.forEach(function(post) { %>
   <%= post.title %>
<% }); %>