使用路线访问数据

时间:2015-02-09 09:17:49

标签: mongodb meteor iron-router

我有一个课程集

{courses{{course1_title,id,author,pages[{title,content,model, etc...},
              [ etc...]{course2,....}}

我试图通过路由器在课程集合中显示当前页面的数据

this.route('page', {
    path: '/:title',
    data: function() {
    return courses.findOne({'pages.title':this.params.title};

    }

});

我想显示当前页面的数据:

<template name="page">
<div class ="container page">
    <h1>Page</h1>
    <!--display current page data -->
    <h3>{{title}}</h3>
    <div>{{ an other content}} etc..... </div>  
</div>

目前,路由器返回整个课程的数据,显示的标题是课程的标题。我无法找到如何访问当前页面的数据,以便在页面模板中显示它。

我试过

return courses.findOne({'pages.title':this.params.title}{fields:{{'pages.title':this.params.title}:1}}   

还有很多其他方法。我没找到它。

什么是正确的方法?

1 个答案:

答案 0 :(得分:0)

您当前的查询将在所有课程中搜索匹配的页面标题,然后返回整个课程(包含所有页面)

您应该只返回相关页面的数据:

course = courses.findOne({pages: { $elemMatch: { title: this.params.title }});
return course.pages[0]

另外,最好为页面创建一个单独的集合(每个页面链接回课程ID)。虽然那不像“Mongo”,但Meteor只能对集合进行反应性操作,而不是子文档。