如果我在输入帖子集合的视图时有一组帖子,并且每个帖子都有一系列评论,那么我如何列出每个帖子的最高评论?
例如:
this.route('postsList', {
path: '/:posts',
waitOn: function() {
return Meteor.subscribe('posts');
},
data: function() {
return Posts.find({});
}
});
然后我正在遍历页面上的帖子集。
{{#each posts}}
{{> postItem}}
{{/each}}
<template name="postItem">
{{title}}
{{topComment}}
</template>
我想为每个帖子项目添加最高评论。
如何使用我的模板/订阅/出版物执行此操作?
帖子和评论是单独的集合。
如果它是嵌入式集合,我可以看到易用性但是如何处理单独的集合?
如果我发布了最近的评论类型的出版物,我怎么能为每个帖子订阅它作为最新的?或者我在这里想错了路?
答案 0 :(得分:2)
如果您坚持使用两个完全分离的集合,则会遇到高效数据库查询的问题。您可以做的是在帖子集合中添加recentComment
字段。如果此字段指向与给定帖子相关的最新评论的id
,您可以更改posts
订阅以包含最近的评论:
Meteor.publish('posts', function() {
var listOfIds = _.pluck(Posts.find({}, {fields: recentComment}).fetch(), 'recentComment');
return [
Posts.find(),
Comments.find({_id:{$in:listOfIds}})
];
});
请注意,此解决方案并非完全被动,但在大多数情况下它已经足够好了。