如何将每个帖子的最高评论作为流星中的单独集合包含在内?

时间:2014-07-18 08:19:01

标签: meteor

如果我在输入帖子集合的视图时有一组帖子,并且每个帖子都有一系列评论,那么我如何列出每个帖子的最高评论?

例如:

  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>

我想为每个帖子项目添加最高评论。

如何使用我的模板/订阅/出版物执行此操作?

帖子和评论是单独的集合。

如果它是嵌入式集合,我可以看到易用性但是如何处理单独的集合?

如果我发布了最近的评论类型的出版物,我怎么能为每个帖子订阅它作为最新的?或者我在这里想错了路?

1 个答案:

答案 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}})
  ];
});

请注意,此解决方案并非完全被动,但在大多数情况下它已经足够好了。