我有一个课程集
{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}}
还有很多其他方法。我没找到它。
什么是正确的方法?
答案 0 :(得分:0)
您当前的查询将在所有课程中搜索匹配的页面标题,然后返回整个课程(包含所有页面)
您应该只返回相关页面的数据:
course = courses.findOne({pages: { $elemMatch: { title: this.params.title }});
return course.pages[0]
另外,最好为页面创建一个单独的集合(每个页面链接回课程ID)。虽然那不像“Mongo”,但Meteor只能对集合进行反应性操作,而不是子文档。