【问题标题】:How to include top comment per each post as a separate collection in meteor?如何将每个帖子的热门评论作为一个单独的集合包含在流星中?
【发布时间】:2014-07-18 08:19:01
【问题描述】:

如果我在进入帖子集合的视图时有一个帖子集合,并且每个帖子都有一个 cmets 集合,我如何在它们旁边列出每个帖子的最高评论?

例如:

  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>

我想把每个帖子的评论放在最前面。

如何使用我的模板/订阅/出版物做到这一点?

Posts 和 cmets 是独立的集合。

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

如果我发布了最近发表的评论类型的出版物,我如何将每篇文章都订阅为最近的文章?还是我在这里想错了?

【问题讨论】:

    标签: meteor


    【解决方案1】:

    如果您坚持拥有两个完全分开的集合,您会遇到高效数据库查询的问题。您可以做的是在您的帖子集合中添加类似recentComment 的字段。如果此字段指向与给定帖子相关的最新评论的 id,您可以更改您的 posts 订阅以包括最近的 cmets:

    Meteor.publish('posts', function() {
      var listOfIds = _.pluck(Posts.find({}, {fields: recentComment}).fetch(), 'recentComment');
      return [
        Posts.find(),
        Comments.find({_id:{$in:listOfIds}})
      ];
    });
    

    请注意,此解决方案不是完全反应式的,但在大多数情况下已经足够了。

    【讨论】:

      猜你喜欢
      • 2016-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多